I think I am doing exactly what you say is necessary (i.e. declare the second method in the superclass's public interface).

Here are some code snippets:

PortalTabView is the super class (which happens to also adopt a protocol, which is not part of this issue but including it for completeness):

@protocol PortalTabProtocol
- (void)refreshDisplay:(XBCapture *)capture because:(XBRefreshCause) trigger;
@end

@interface PortalTabView : NSView <PortalTabProtocol>
{}
- (NSString *)tabName;
- (void)refreshDisplay:(XBCapture *)capture because:(XBRefreshCause) trigger;
- (XBCapture *)displayCapture;
@end

PortalActionView is the class that gets the compiler warnings about the ReadArchiveClient protocol:

@protocol ReadArchiveClient
- (XBCapture *)displayCapture;
- (void)processedArchive:(WebArchive *)archive;
@end

@interface PortalActionView : PortalTabView <ReadArchiveClient>


So, PortalActionView does implement processedArchive: (without declaring it in its interface) but the displayCapture method is coming from its super class which does declare this method in its public interface, yet the compiler complains "method definition for '- displayCapture' not found". Complier bug?


On Jul 31, 2008, at 1:13 PM, Bill Bumgarner wrote:

On Jul 31, 2008, at 11:36 AM, Mark Sanvitale wrote:
I have a formal protocol that declares two methods. I have a class that adopts this protocol. This class implements one of the protocol methods. This class inherits from another class. This super class actually implements a method matching the signature of the second method declared in the protocol. Everything runs just fine, however, the compiler insists something is wrong by warning me "incomplete implementation of class X", "method definition for '<method-name>' not found", and class 'X' does not fully implement the 'Y' protocol".

I think the compiler is wrong. Or is this "by design" according to some strict rule(s) of Objective-C? Am I expected to redefine the method I inherit from my super class if the method is part of a protocol I adopt?

The compiler has no way of knowing that the protocol's contract was fulfilled by the superclass unless you also declare the second method in the superclass's public interface.

If you don't want to expose the method's declaration, declare it in a private header.

b.bum





_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to