First, I'm not sure I really understand what a selector is. From my understanding, it's the name of a method, and you can assign it to a class of type 'SEL' and then run methods such as respondToSelector to see if the receiver implements that method. Can someone offer up a better explanation?
Secondly, to this point, I have the following code:
NSString *thing = @"Hello, this is Craig";
SEL sel = @selector(lowercaseString:);
NSString *lower = (([thing respondsToSelector:sel]) ? @"YES" : @"NO");
NSLog (@"Responds to lowercaseString: %@", lower);
if ([thing respondsToSelector:sel]) //(lower == @"YES")
NSLog(@"lowercaseString is: %@", [thing lowercaseString]);
You have to be very careful about the method names. In this case, the method name is just "
lowercaseString", not "
lowercaseString:" (note the absence of the colon). That's why you're getting
NO returned, because
NSString objects respond to the
lowercaseString message but not the
How do you know when to add a colon? You add a colon to the message name if you would add a colon when calling it, which happens if it takes one argument. If it takes zero arguments (as is the case with
lowercaseString), then there is no colon. If it takes more than one argument, you have to add the extra argument names along with their colons, as in
You can also look at the documentation and note the presence or absence of a trailing colon.