很多类似的问题,但没有解决方案适用于我的情况。
我尝试编写一个简单的FlipSideApp。只有两个视图,每个视图只有一个按钮(flipBtn | flopBtn),以反过来呈现另一个视图。
第一个视图上的flip
运行正常。另一个视图中的flop
导致了
unrecognized selector sent to instance 0x6c3adf0
。
在文件 FlipSide.m 中调用[self dismissViewControllerAnimated:YES completion:nil];
后应用程序崩溃(请参阅下面的代码)。其中0x6c3adf0
是self
的当前地址,在这种情况下是FlipSide : UIViewController
的实例。
所以我认为错误消息中提到的无法识别的选择器是dismissViewControllerAnimated:completion
- 方法
虽然键入Xcode的CodeSense“推荐”该方法。
根据 UIViewController类参考,此方法在iOS 5.0 SDK中已知。
我的部署目标是5.0,设备iPhone,基础SDK iOS 5.0,架构标准(arm7)。
为所有异常设置符号断点,调试器在main函数的UIApplicationMain处停止。这没什么能给我一个暗示 Zombie-Objects已启用。即使我认为内存泄漏不是问题所在。
我能做什么才能识别选择器?
文件:“ 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;
}
文件:“ FirstViewController.h ”
@interface FirstViewController : UIViewController
- (IBAction)flipBtn:(id)sender;
@end
文件:“ 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__);
}
文件:“ FlipSide.h ”
@interface FlipSide : UIViewController
- (IBAction)flopBtn:(id)sender;
@end
档案:“ 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__);
}
控制台 OutPut是:
-[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
答案 0 :(得分:3)
我自己获得了解决方案!
知道错误信息是有道理的:
答案在于使用过的XIB文件。
经验法则:
通过右键单击或“ctrl”+点击检查所有发送事件与现有方法的连接,检查InterfaceBuilder中的GUI元素! < / p>
如果不是这样的话
instance
表示GUI元素获得sent
a
unrecognized selector
表示在InterfaceBuilder中连接到它的非现有方法。 ; - )
请注意,一个事件可以连接到多个方法。如果即使其中一个未定义(任何更长时间),您也会收到该错误。 如果您手动删除,重命名或更改方法的签名,请记住这一点。以前建立的连接可能仍然存在。