Lots of similar questions but non with a solution that works in my case.
I try to write a simple FlipSideApp. Just two views with a single button each (flipBtn | flopBtn) to present the other view vice versa.
flip
on the first view works fine. flop
on the other view causes aunrecognized selector sent to instance 0x6c3adf0
.
The App crashes after calling [self dismissViewControllerAnimated:YES completion:nil];
in file FlipSide.m (see code below). Where 0x6c3adf0
is the current address of self
which is an instance of FlipSide : UIViewController
in that case.
So I think the unrecognized selector mentioned in the error message is the dismissViewControllerAnimated:completion
-method.
While typing Xcode's CodeSense "recommends" that method.
According to the UIViewController Class Reference this method is known in iOS 5.0 SDK.
My Deployment Target is 5.0, Device iPhone, Base SDK iOS 5.0, Architecture Standard (arm7).
With a symbolic breakpoint set for all Exceptions the debugger stops at UIApplicationMain in main function. Which is nothing that give me a hint.
Zombie-Objects are enabled. Even when I think memory leaks are not the problem here.
What can I do that makes the selector be recognized?
File: "AppDelegate.m"
#import "FirstViewController.h"
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[[UIWindow alloc]
initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
UIViewController *viewController1 = [[[FirstViewController alloc]
initWithNibName:@"FirstViewController" bundle:nil] autorelease];
self.window.rootViewController = viewController1;
[self.window makeKeyAndVisible];
return YES;
}
File: "FirstViewController.h"
@interface FirstViewController : UIViewController
- (IBAction)flipBtn:(id)sender;
@end
File: "FirstViewController.m"
…
- (IBAction)flipBtn:(id)sender {
NSLog(@"%s -- reached --", __PRETTY_FUNCTION__);
FlipSide* flipSide = [[FlipSide alloc] initWithNibName:@"FLipSide" bundle:nil];
[self presentViewController:flipSide animated:YES completion:nil];
NSLog(@"%s -- done --", __PRETTY_FUNCTION__);
}
File: "FlipSide.h"
@interface FlipSide : UIViewController
- (IBAction)flopBtn:(id)sender;
@end
File: "FlipSide.m"
#import "FlipSide.h"
- (IBAction)flopBtn:(id)sender {
NSLog(@"%s -- reached --", __PRETTY_FUNCTION__);
NSLog(@"self address is: %@", self);
// // // ??? unrecognized selector sent to instance ???
[self dismissViewControllerAnimated:YES completion:nil]; // <--
NSLog(@"%s -- done --", __PRETTY_FUNCTION__);
}
Console OutPut is:
-[FirstViewController flipBtn:] -- reached --
-[FirstViewController flipBtn:] -- done --
-[FLipSide flopBtn:] -- reached --
self address is: <FLipSide 0x6c3adf0>
-[FLipSide flopBtn:] -- done --
-[FLipSide flopBtn:]: unrecognized selector sent to instance 0x6c3adf0
I got the solution myself!
Knowing it the error message makes sense:
The answer lies in the used XIB-file(s).
Rule of thumb:
Check your GUI-Elements in InterfaceBuilder by right-cklicking or "ctrl"+clicking that all their sent events are connected to existing methods!
If that is not the case theinstance
means the GUI element get sent
aunrecognized selector
means a non existing method connected to it in InterfaceBuilder. ;-)
Be aware that one event can be connected to several methods. If even one of them is not defined (any longer) you will get that error. Keep this in mind if you delete, rename or change signatures of methods manually. The formerly made connection may still exist.
来源:https://stackoverflow.com/questions/8467779/unrecognized-selector-sent-to-instance-obj-adrafter-sending-dismissviewcont