iphone - 取消模态视图和应用程序崩溃

标签 iphone cocoa ios modalviewcontroller presentmodalviewcontroller

我对取消模态视图感到困惑:

案例 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 ,你应该监听这个通知,然后在通知发布时关闭模态视图。

也就是说,回答您的问题:

  1. 模态视图 Controller 永远不会关闭自己。发布通知,然后让导航 Controller 处理它。

  2. 在关闭第二个模态视图之前,您不能关闭第一个模态视图。如果这样做,您将收到 EXC_BAD_ACCESS 错误。将第二个模态视图视为第一个模态视图的“内部”。如果第一个被解散,第二个也会被拖走,但它并没有被解散。

关于iphone - 取消模态视图和应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4848284/

相关文章:

macos - 在 Cocoa 中移动文件

ios - 你能强制ios启动safari而不是任何其他浏览器,甚至给出一个选项吗?

iphone - 是否有 objective-c "equivalent"到 ruby​​ 的发送方法?

ios - 将带有 ScrollView 和 AutoLayout 的 UIViewController 添加到另一个 UIViewController

iphone - 核心数据获取或操作/创建数组哪个更有效?

objective-c - 如何在 NSCountedSet 中将对象计数设置为零(或某个值)?

objective-c - 应用程序启动时的 NSImage

iOS颜色在UIImage中透明

ios - 在ios中估算Scrollview的偏移量

iphone - 单击 iPhone 按钮时在 safari 中打开 URL