What does it mean \"unrecognized selector sent to instance\"
in Xcode
?
For me it was just Xcode
not bothering to compile the code. Apple obviously doesn't think iOS development is complicated enough, so they have to build extra flakiness into the IDE.
I am told that SHIFT+COMMAND+K
to clean the build can be a great help.
I think it's when you call a selector on instance of method that doesn't belong to this instance. maybe I'm wrong I'm not sure, it's been a while since I've coded anything in xcode.
In my case it means I did not understand (for two days) a very simple requirement of the handler (selector, function): I had left off the ...:(NSNotification*)notification... in my selector (function).
In the end it is just a self.stupidMistake (or programming tired while trying to understand a new thing in iOs/xCode). I read the docs at apple, I read many, many here at stackoverflow and read all kinds of other pages from the search results and just kept overlooking the fact that I had: in the viewDidLoad:
[[NSNotificationCenter defaultCenter] addOberserver:self selector:@selector(myHandler:) name:@"UIApplicationWillResignActiveNotification" object:nil];
in the .h (declaration) and .m (real code) I had invented:
-(void)myHandler { ... }
This generated the unrecognized selector sent to instance (crash and debug output) at runtime (no errors or warnings in xcode). Then I spent almost two whole days trying to figure out the error and the error was:
-(void)myHandler:(NSNotification*)notification { ... }
Hope it helps anyone else stuck - it is a syntax thing (your Selector or Handler or Function or whatever you want to call it) must take a (NSNotification*) 'object' as a parameter whether you use it or not; and xcode (4.2 w/iOs SDK 5.0) does not generate any errors or warnings about this 'mistake'.
If you've deleted and re-created buttons on the Storyboard, you may have the button linked to two different methods: the old (deleted) one, and the new one. This has happened to me many times.
To fix: 1) In XCode/IB, view the Storyboard. 2) Click on the button that is causing the exception. 3) On the far-right panel, click the 'connector' icon. (A circle with an arrow in it, as of Apr-2015). 4) Assuming you're linking to the action "Touch Up Inside", make sure only ONE method is linked. An [x] will appear next to each, so if there are two, kill the one that no longer exists.
It means, method is not defined or on the other-way, calling a method on the wrong object.
classic example of this error is missing of ':' in selector call.
UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self
action:@selector(DatePickerDoneClick)];
Here,
action:@selector(DatePickerDoneClick:)
is expected rather than
action:@selector(DatePickerDoneClick)
I received this error due to not assigning the custom class to the view in the Interface Builder.
NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"EventsFilterView" owner:self options:nil];
self.filters = [subviewArray objectAtIndex:0];
The variable self.filters
was assigned to the EventFilterView
class but the actual view in the xib file was not.
Hope this helps someone.