My ViewController1 推送 ViewController2
ViewController2 *controller =
[[ViewController2 alloc] init];
[self.navigationController pushViewController:controller
animated:NO];
[controller release];
ViewController2 具有 UITableView ...在 xib 文件中,我将委托与文件所有者连接。此外,ViewController2 具有"完成"按钮
- (IBAction)doneButtonPressed {
[self.navigationController popViewControllerAnimated:NO];
}
问题是,如果同时单击表行和完成按钮,有时确实在弹出 ViewController2 之后进行选择行索引路径:方法调用,并且我有 SIGABRT 错误和记录器中的这个东西:
[__NSCFSet tableView:didSelectRowAtIndexPath:]: unrecognized selector sent to instance 0x62579d0'
那么在我弹出 viewController2 后如何调用 tableView:didSelectRowAtIndexPath?它应该已经死了...
一个简单的解决方法是这样做:
- (IBAction)doneButtonPressed {
self.tableView.delegate = nil;
[self.navigationController popViewControllerAnimated:NO];
}
这样,您就可以保证在离开该视图时不会再发生委托呼叫。您也可以在视图控制器的 dealloc 方法中执行此操作(可能是更好的位置)。
popViewController
和pushViewController
方法异步执行其任务。他们使用动画块将视图控制器滑入和滑出。视图控制器从其超级视图中删除,并在动画块的完成部分中释放。崩溃是由于这种延迟(我认为是 0.3 秒)。