繁体   English   中英

UIViewController -dealloc在解除模态视图控制器后被调用

[英]UIViewController -dealloc Being Called After Dismissing Modal View Controller

我的应用程序中有一个显示UITableView的视图。 此视图在nib文件中创建,并具有自定义视图控制器。 此视图的UIViewController子类充当UITableView的数据源和委托。

我的UITableView根据我的数据显示几行。 然后,最后一行显示不同的文本:“添加另一个...”。 如果选择了最后一行,我会提供一个模态视图控制器(允许用户添加更多数据)。 当我关闭模态视图控制器时,我再次看到原始视图(如预期的那样)并且看起来都很好。 但是,当我尝试与此视图进行交互时,应用程序崩溃了。

从通过UIViewController(对于UITableView)放置几个NSLog()语句,我已经确定在模式视图被解除后正在调用-dealloc方法。 这解释了当我尝试使用该视图执行某些操作时的崩溃。 但是,我不知道为什么在这个视图控制器上调用-dealloc。

要解雇模态视图控制器,我有:

[self dismissModalViewController:YES];

作为模态视图控制器的UIViewController中的IBAction方法中的代码。 此操作与相应nib文件中的取消按钮相关联。

此外,我从View Controller编程指南中了解到,可以从内部解除模态控制器,但使用委托更加健壮。 我最初使用的是委托,但是委托代理来简化调试。 我只是让代理重新进行仔细检查,使用委托时会出现相同的行为。 模态控制器的动作方法调用实现为:

[[self delegate] myModalViewController:self didAddObject:obj];  

父视图控制器中的委托实现是:

[self dismissModalViewController:YES]

如果有人之前已经看过这个,或者对可能发生的事情有什么建议或如何调试这个,我将不胜感激。

如果正在调用-dealloc ,则会释放视图控制器。 尝试在视图控制器中实现-release

-(void)release {
    NSLog(@"view controller released");
    [super release];
}

这样,您可以使用调试器在发生此意外释放消息时检查调用堆栈。

从模态视图控制器本身调用dismissModalViewController危险(消息将被转发到父视图控制器),如果你没有在其他地方保留它。 通常,父视图控制器负责解除它所呈现的模态视图控制器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM