我的应用程序中有一个显示UITableView的视图。该视图是在一个nib文件中创建的,并具有一个自定义视图控制器。该视图的UIViewController子类充当UITableView的数据源和委托。UIViewController -dealloc在关闭模态视图控制器后调用
我的UITableView根据我的数据显示了几行。然后,最后一行显示不同的文本:“添加另一个...”。如果最后一行被选中,我会提供一个模态视图控制器(以允许用户添加更多数据)。当我解散模态视图控制器时,我再次看到原始视图(如预期的那样),并且看起来都很好。但是,当我尝试与此视图交互时,应用程序崩溃。
通过放置几个NSLog()语句通过UIViewController(对于UITableView),我确定在模式视图关闭之后调用-dealloc方法。这解释了当我试图用这种观点做某事时的崩溃。不过,我不知道为什么-dealloc在这个视图控制器上被调用。
要关闭模态视图控制器,我有:
[self dismissModalViewController:YES];
如在模态视图控制器的UIViewController的IBAction为方法的代码。此操作绑定到相应的nib文件中的取消按钮。
另外,我对View Controller Programming Guide的理解是,可以从内部解除模态控制器,但使用代表更加稳健。我最初使用的是一个委托,但委托出去简化调试。我只是将委托放回来进行仔细检查,并且在使用委托时会发生相同的行为。模态控制器的动作方法调用是这样实现的:
[[self delegate] myModalViewController:self didAddObject:obj];
父视图控制器的委托实现:
[self dismissModalViewController:YES]
如果有人见过这个或有什么可能会发生任何建议或如何调试,我将不胜感激。
你的意思是父视图控制器是被释放的? – BoltClock 2011-01-12 19:47:35
是的,没错。 – jmac 2011-01-12 20:32:59