0

我的 ViewController1 推送 ViewController2

ViewController2 *controller =
    [[ViewController2 alloc] init];
[self.navigationController pushViewController:controller
    animated:NO];
[controller release];

ViewController2 在 xib 文件中有 UITableView ...我将委托与文件的所有者连接。ViewController2 也有完成按钮

- (IBAction)doneButtonPressed {
     [self.navigationController popViewControllerAnimated:NO];
 }

问题是,如果同时单击表行和完成按钮,有时会在弹出 ViewController2 之后调用 didSelectRowAtIndexPath: 方法,并且我在 logger 中有 SIGABRT 错误和这个东西:

[__NSCFSet tableView:didSelectRowAtIndexPath:]: unrecognized selector sent to instance 0x62579d0'

那么在我弹出 viewController2 之后如何调用 tableView:didSelectRowAtIndexPath 呢?应该是死了...

4

2 回答 2

2

一个简单的解决方法是这样做:

- (IBAction)doneButtonPressed {
     self.tableView.delegate = nil;
     [self.navigationController popViewControllerAnimated:NO];
 }

这样您就可以保证在您离开该视图时不会再发生委托调用。您也可以在视图控制器的 dealloc 方法中执行此操作(可能是一个更好的地方)。

于 2012-04-13T14:19:17.310 回答
1

popViewController&pushViewController方法异步执行它们的任务。他们使用动画块将 viewController 滑入和滑出。ViewController 从其父视图中移除并在动画块的完成部分中释放。崩溃是因为这种延迟(我认为是 0.3 秒)。

于 2012-04-13T14:27:50.737 回答