0

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

案例 1:我有一个导航视图控制器,并且我正在从这个导航视图控制器展示一个模态视图控制器。现在,当我要取消这个模态视图时,我应该从哪里调用dismissModalView 方法——导航视图控制器或模态视图控制器?

案例 2:我有一个模态视图控制器,我正在从第一个模态视图控制器展示另一个模态视图控制器。现在,当我要取消第二个模态视图时,我应该从哪里调用dismissModalView 方法——第一个模态视图控制器或第二个模态视图控制器?

从错误的地方取消它也会导致应用程序崩溃吗?

4

3 回答 3

1
  1. 您应该关闭模态视图控制器。
  2. 您应该从第二个模态视图控制器中将其关闭。

应用程序崩溃是因为当您尝试关闭模式视图控制器时,相应视图控制器的范围丢失,可能是您在关闭之前释放了视图控制器

于 2011-01-31T07:51:16.613 回答
1

处理模态视图控制器的一个可取的方法是向我们发送通知以通知呈现它的类释放它。通常,您使用与此类似的代码来显示模态视图。

SomeClass *yourViewController = [[SomeClass alloc] initWithNibName:@"SomeClass" bundle:nil];
[self presentModalViewController: yourViewController animated: YES];
[yourViewController release];

使用上面的代码,您的模态视图应该以 1 的保留计数结束。当您关闭它时,父视图将释放它并从内存中清除它。模态视图中的“关闭”按钮应执行如下代码:

- (void)dismissSelf{
  [[NSNotificationCenter defaultCenter] postNotifivationName:@"I'm done" object:self];
}

回到你的父视图控制器,你应该监听这个通知,然后在通知发布时关闭模式视图。

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

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

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

于 2011-01-31T15:20:21.727 回答
0

您总是从控制器中关闭模态视图,并在其中展示它(使用dismissModalViewControllerAnimated)。所以:

  1. 在导航控制器中
  2. 在第一个模态视图控制器中
于 2011-01-31T14:58:13.027 回答