我的ViewController1推送ViewController2
ViewController2 *controller =
[[ViewController2 alloc] init];
[self.navigationController pushViewController:controller
animated:NO];
[controller release];
ViewController2在xib文件中有UITableView ...我将委托与文件所有者连接。 ViewController2也有Done按钮
- (IBAction)doneButtonPressed {
[self.navigationController popViewControllerAnimated:NO];
}
问题是,如果同时单击表行和完成按钮,有时在弹出ViewController2之后会执行selectSelectRowAtIndexPath:方法调用,并且我在记录器中出现SIGABRT错误:
[__NSCFSet tableView:didSelectRowAtIndexPath:]: unrecognized selector sent to instance 0x62579d0'
那么在弹出viewController2之后如何调用tableView:didSelectRowAtIndexPath?它应该死了......
答案 0 :(得分:2)
一个简单的解决方法就是:
- (IBAction)doneButtonPressed {
self.tableView.delegate = nil;
[self.navigationController popViewControllerAnimated:NO];
}
通过这种方式,您可以保证在离开该视图时不会再发生委托调用。您也可以在视图控制器的dealloc方法中执行此操作(可能是更好的地方)。
答案 1 :(得分:1)
popViewController
& pushViewController
方法异步执行任务。他们使用动画块来滑动和调出viewController。 ViewController从其超级视图中删除,并在动画块的完成部分中释放。崩溃是因为这种延迟(我想0.3秒)。