FROM : K. Darcy Otto
DATE : Tue Apr 29 22:40:43 2008
The casting worked, and the protocol gets found; but I'm still getting
a warning that the protocol is not found. Here's what I have:
Superclass.h:
@protocol Check;
Superclass.m:
@protocol Check
@optional
-(BOOL)optionalMethodToImplement;
@end
(I'm relegating the protocol to the .m file to make it "private" in a
sense.)
Subclass.h
@interface Subclass : Superclass <Check>
...
Now, the compiler issues a warning at the @interface line in
Subclass.h - "no definition of protocol 'Check' is found". But it is
clear that the protocol is being located at runtime nevertheless,
because if I eliminate <Check> from the @interface line,
optionalMethodToImplement: does not get called. Also, what is
interesting is that if I move @protocol Check ... @end in Superclass.m
to Superclass.h, the warning goes away. So, is there a way to keep
@protocol Check ... @end in Superclass.m and eliminate the warning?
Thanks.
On 28-Apr-08, at 11:25 PM, Michael Vannorsdel wrote:
> You can make the superclass's method look like this:
>
> - (void)doSomething
> {
> if([self conformsToProtocol:@protocol(Check)])
> [(SuperClass <Check> *)self optionalMethodToImplement];
> }
>
> The cast eliminates the compiler warning.
>
> As far as making it private it depends what you mean by that. If
> you don't want it visible in headers you're going to distribute you
> can put:
>
> @protocol Check;
>
> in the public header then actually define the whole protocol in a
> private undistributed header.
>
>
> On Apr 28, 2008, at 9:22 PM, K. Darcy Otto wrote:
>
>> Okay, I have done this, and things are compiling and running
>> correctly. Thank you. Two additional questions then. First, I
>> still get the warning that the superclass "may not respond" to the
>> method (and to be sure, it is only implemented in the subclass, but
>> the superclass calls it after a conformsToProtocol: check).
>> Second, I would like the optionalMethodToImplement to be private -
>> usually I put this in the .m file under a category; but when I do
>> that with the protocol, the subclass cannot locate the protocol.
>> Any suggestions?
>
> _______________________________________________
>
> Cocoa-dev mailing list (<email_removed>)
>
> 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/<email_removed>
>
> This email sent to <email_removed>
DATE : Tue Apr 29 22:40:43 2008
The casting worked, and the protocol gets found; but I'm still getting
a warning that the protocol is not found. Here's what I have:
Superclass.h:
@protocol Check;
Superclass.m:
@protocol Check
@optional
-(BOOL)optionalMethodToImplement;
@end
(I'm relegating the protocol to the .m file to make it "private" in a
sense.)
Subclass.h
@interface Subclass : Superclass <Check>
...
Now, the compiler issues a warning at the @interface line in
Subclass.h - "no definition of protocol 'Check' is found". But it is
clear that the protocol is being located at runtime nevertheless,
because if I eliminate <Check> from the @interface line,
optionalMethodToImplement: does not get called. Also, what is
interesting is that if I move @protocol Check ... @end in Superclass.m
to Superclass.h, the warning goes away. So, is there a way to keep
@protocol Check ... @end in Superclass.m and eliminate the warning?
Thanks.
On 28-Apr-08, at 11:25 PM, Michael Vannorsdel wrote:
> You can make the superclass's method look like this:
>
> - (void)doSomething
> {
> if([self conformsToProtocol:@protocol(Check)])
> [(SuperClass <Check> *)self optionalMethodToImplement];
> }
>
> The cast eliminates the compiler warning.
>
> As far as making it private it depends what you mean by that. If
> you don't want it visible in headers you're going to distribute you
> can put:
>
> @protocol Check;
>
> in the public header then actually define the whole protocol in a
> private undistributed header.
>
>
> On Apr 28, 2008, at 9:22 PM, K. Darcy Otto wrote:
>
>> Okay, I have done this, and things are compiling and running
>> correctly. Thank you. Two additional questions then. First, I
>> still get the warning that the superclass "may not respond" to the
>> method (and to be sure, it is only implemented in the subclass, but
>> the superclass calls it after a conformsToProtocol: check).
>> Second, I would like the optionalMethodToImplement to be private -
>> usually I put this in the .m file under a category; but when I do
>> that with the protocol, the subclass cannot locate the protocol.
>> Any suggestions?
>
> _______________________________________________
>
> Cocoa-dev mailing list (<email_removed>)
>
> 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/<email_removed>
>
> This email sent to <email_removed>
| Related mails | Author | Date |
|---|---|---|
| K. Darcy Otto | Apr 29, 02:00 | |
| Jens Alfke | Apr 29, 02:16 | |
| Michael Vannorsdel | Apr 29, 02:32 | |
| K. Darcy Otto | Apr 29, 05:22 | |
| Michael Vannorsdel | Apr 29, 08:25 | |
| Paul Sargent | Apr 29, 10:51 | |
| K. Darcy Otto | Apr 29, 22:40 | |
| Andy Lee | Apr 29, 23:05 | |
| Michael Vannorsdel | Apr 30, 00:00 | |
| Graham Cox | Apr 30, 00:52 |






Cocoa mail archive

