iPhone:UITableView 委托在 viewController 发布后处于活动状态



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 方法中执行此操作(可能是更好的位置)。

popViewControllerpushViewController方法异步执行其任务。他们使用动画块将视图控制器滑入和滑出。视图控制器从其超级视图中删除,并在动画块的完成部分中释放。崩溃是由于这种延迟(我认为是 0.3 秒)。

最新更新