我对取消模态视图感到困惑:
案例 1:我有一个导航 View Controller ,我从这个导航 View Controller 中呈现一个模态视图 Controller 。现在,当我要取消这个模态视图时,我应该从哪里调用 dismissModalView 方法——导航 View Controller 还是模态视图 Controller ?
案例 2:我有一个模态视图 Controller ,我正在展示第一个模态视图 Controller 中的另一个模态视图 Controller 。现在,当我要取消第二个模态视图时,我应该从哪里调用 dismissModalView 方法——第一个模态视图 Controller 还是第二个模态视图 Controller ?
从错误的地方取消它是否也会导致应用程序崩溃?
最佳答案
处理模态视图 Controller 的一种明智方法是向我们发送通知,通知呈现它的类释放它。通常,您使用与此类似的代码来显示模态视图。
SomeClass *yourViewController = [[SomeClass alloc] initWithNibName:@"SomeClass" bundle:nil];
[self presentModalViewController: yourViewController animated: YES];
[yourViewController release];
使用上面的代码,你的模态视图应该以 1 的保留计数结束。当你关闭它时,父 View 将释放它并将它从内存中清除。模态视图中的“关闭”按钮应该执行如下代码:
- (void)dismissSelf{
[[NSNotificationCenter defaultCenter] postNotifivationName:@"I'm done" object:self];
}
回到你的父 View Controller ,你应该监听这个通知,然后在通知发布时关闭模态视图。
也就是说,回答您的问题:
模态视图 Controller 永远不会关闭自己。发布通知,然后让导航 Controller 处理它。
在关闭第二个模态视图之前,您不能关闭第一个模态视图。如果这样做,您将收到 EXC_BAD_ACCESS 错误。将第二个模态视图视为第一个模态视图的“内部”。如果第一个被解散,第二个也会被拖走,但它并没有被解散。
关于iphone - 取消模态视图和应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4848284/