2

很多类似的问题,但没有适用于我的解决方案。


我尝试编写一个简单的 FlipSideApp。只有两个视图,每个视图都有一个按钮 (flipBtn | flopBtn) 来呈现另一个视图,反之亦然。 flip在第一个视图上工作正常。flop另一种观点是导致
unrecognized selector sent to instance 0x6c3adf0.

调用[self dismissViewControllerAnimated:YES completion:nil]; 文件FlipSide.m后应用程序崩溃(参见下面的代码)。0x6c3adf0在这种情况下,当前地址在哪里是self一个实例FlipSide : UIViewController

所以我认为错误消息中提到的无法识别的选择器是dismissViewControllerAnimated:completion-method。
在输入 Xcode 的 CodeSense 时“推荐”该方法。

根据UIViewController Class Reference,此方法在 iOS 5.0 SDK 中是已知的。
我的部署目标是 5.0,设备 iPhone,基础 SDK iOS 5.0,架构标准 (arm7)。

为所有异常设置符号断点后,调试器在主函数中的 UIApplicationMain 处停止。这没什么能给我提示的。
僵尸对象已启用。即使我认为内存泄漏不是这里的问题。

我该怎么做才能使选择器被识别?



文件:“ 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__);
}




控制台输出为:

-[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 
4

1 回答 1

3

我自己得到了解决方案

知道错误消息是有道理
的:答案在于使用的 XIB 文件。

经验法则:通过右键单击“ctrl”+单击来
检查 InterfaceBuilder 中的 GUI 元素,以确保它们发送的所有事件都连接到现有方法!

如果不是这种情况,则
instance意味着 GUI 元素获得sent
unrecognized selector一个在 InterfaceBuilder 中连接到它的不存在的方法。;-)

请注意,一个事件可以连接到多个方法。如果其中一个没有定义(不再),您将收到该错误。如果您手动删除、重命名或更改方法的签名,请记住这一点。以前建立的连接可能仍然存在。

于 2011-12-12T19:21:17.230 回答