Re: respondsToSelector & "warning: may not respond"
Re: respondsToSelector & "warning: may not respond"
- Subject: Re: respondsToSelector & "warning: may not respond"
- From: Dave Zwerdling <email@hidden>
- Date: Fri, 26 Nov 2010 18:22:48 -0800
I always take the protocol route. You can implement other methods and do a single cast to NSObject <nameOfProtocol>* (or id<nameOfProtocol> if you don't need the NSObject methods) and then just pass around that. All you have to check for in instantiation is that it passes implementsProtocol: and then you're set. After that, not only do you typically have the ability to forgo these warnings (they won't appear) but so long as you import the protocol header, XCode will implement code completion for the protocol, which is nice.
I use protocols for internal classes for pull-up refactoring, too. After creating and requiring the protocol in the object, if you change the controllers, all you have to do is change the method name in the protocol. XCode will throw warnings in all the places that the method should -but isn't- implemented.
Dave
On Nov 26, 2010, at 10:27 AM, Mike Abdullah wrote:
> You have many options, in rough order of cleanness:
>
> A) Declare a protocol that your objects conform to. Make -setOrdinal: @optional
>
> B) Do [object performSelector:@selector(setOrdinal:) withObject:value] or use -setValue:forKey:
>
> C) Typecast the object to a class that is known to implement -setOrdinal:
>
> On 26 Nov 2010, at 17:47, Mikkel Eide Eriksen wrote:
>
>> I should have mentioned that it is declared, but obj can be one of many classes only some of which have setOrdinal:
>>
>> On Nov 26, 2010, at 6:46 PM, banane wrote:
>>
>>> declare the method in your header file. "-(void)setOrdinal;"
>>>
>>> On Fri, Nov 26, 2010 at 9:08 AM, Mikkel Eide Eriksen <email@hidden> wrote:
>>> Hi all,
>>>
>>> I have the following bit in my code:
>>>
>>> if ([obj respondsToSelector:@selector(setOrdinal:)]) {
>>> [obj setOrdinal:value];
>>> }
>>>
>>> XCode gives a warning that obj may not respond to setOrdinal: which won't be a problem unless something is really screwy. But how do I get rid of the warning? Or do I just live with it?
>>>
>>> Regards,
>>> Mikkel
>>> _______________________________________________
>>>
>>> Cocoa-dev mailing list (email@hidden)
>>>
>>> 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:
>>>
>>> This email sent to email@hidden
>>>
>>
>> _______________________________________________
>>
>> Cocoa-dev mailing list (email@hidden)
>>
>> 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:
>>
>> This email sent to email@hidden
>
> _______________________________________________
>
> Cocoa-dev mailing list (email@hidden)
>
> 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:
>
> This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden