Selectors in Objective-C?
objective-c, selector
Solution
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 `lowercaseString:` message.
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 `compare:options:range:locale:`.
You can also look at the documentation and note the presence or absence of a trailing colon.
Problem
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]); ``` However, even though `thing` is clearly a kind of NSString, and should respond to lowercaseString, I cannot get the 'respondsToSelector' conditional to return "YES"...