In your subclass, redeclare the delegate property as conforming to your protocol. I assume your protocol is an extension of NSTableViewDelegate. So, you'd declare the property as:
- (void)setDelegate:(id <YourProtocol>)delegate;
- (id <YourProtocol>)delegate;
or, possibly:
@property (assign) id<YourProtocol> delegate;
In your implementation, you could implement overrides of the accessors which just call through to super. The getter will have to do a type cast since super's declaration is in terms of NSTableViewDelegate.
Or, if you used the property declaration, you can simply do:
@dynamic delegate;
which tells the compiler that the accessors will be available through some means that isn't explicit in this implementation (i.e. inherited).
Now, when you invoke self.delegate, it will have the desired type.