我收到此错误,而我正在尝试加载另一个视图
* 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [__NSCFType new1:]:无法识别的选择器发送到实例0x5c27950'
这里new1是一个按钮,按下时会加载一个视图。
这是new1
中的代码-(IBAction) new1:(id) sender
{
viewController = [[iTViewController alloc] initWithNibName:@"iTViewController" bundle:[NSBundle mainBundle]];
[self.view addSubview:viewController.view];
}
注意:当我从fresh启动应用程序并按下new1按钮时,它可以完美地工作,但当我按下其他按钮加载其他视图时,当我返回到此视图并按下new1时,它会崩溃
答案 0 :(得分:1)
错误* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '- [__NSCFType new1:]: unrecognized selector sent to instance 0x5c27950'
可能不是来自- (IBAction)new1:(id)sender
方法。这个错误说的是你试图在地址0x5c27950
的任何对象上调用一个不存在的方法。以下是一些可能的解决方案:
在调试器中设置NSZombieEnabled,malloc堆栈日志记录和保护malloc。然后,当您的应用程序崩溃时,请在gdb comsole中输入:
(gdb) info malloc-history 0x5c27950
将0x5c27950替换为堆栈跟踪所引起崩溃的对象的地址,它将为您提供更有用的堆栈跟踪,并且应突出显示导致问题的确切行。
Check out this article for more info on NSZombieEnabled
This one for MallocStackLogging info
More info on guard malloc here
另外,您是否尝试过推动视图控制器(假设您使用的是导航控制器):
- (IBAction)new1:(id)sender {
iTViewController *viewController = [[iTViewController alloc] initWithNibName:@"iTViewController" bundle:nil];
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];
}
或者,如果您不使用导航控制器,则可以模态显示:
- (IBAction)new1:(id)sender {
iTViewController *viewController = [[iTViewController alloc] initWithNibName:@"iTViewController" bundle:nil];
[self presentModalViewController:viewController animated:YES];
[viewController release];
}
另一种可能性是您正在调用[self new1:someButton];
,但该方法未在您的头文件中声明,如下所示:
@interface MyViewController: UIViewController {
........
}
- (IBAction)new1:(id)sender;
@end