0

我的应用程序中发生了一个间歇性错误,我终于能够通过在特定场景中模拟内存警告来始终如一地重现它。这是设置。

 Nav controller
 (as tab inside      --> Modal Controller 1 --> Modal Controller 2
 Tab Controller)

如果我在屏幕上显示模态控制器 2 时模拟内存警告,则模态控制器 1 将被关闭,底部导航控制器会一直弹回其根目录。这正是报告的错误中发生的情况。

如果用户随后按下 MC2 中的“完成”按钮,它会调用 MC1 中的委托方法,该方法会崩溃,因为内存警告导致 MC1 被卸载并解除分配。

在我的应用程序的其他地方,我有导航控制器呈现模式视图控制器链,但触发内存警告只会在我的应用程序的一个特定区域导致此问题。

有什么可能导致这种行为吗?我没有具体的代码示例,因为我不确定是什么代码导致了问题。我会很感激任何指示。

4

1 回答 1

1

当发生内存警告时,iOS 可能会释放任何不可见的视图,包括 MC1 的视图(但不是 MC1 本身)。您需要在 MC1 中实现以下内容。

  • 在 viewDidUnload 或显示 MC2 之前,记住当前状态。
  • 在 viewDidLoad 中,如果有的话,恢复旧状态。
  • 在委托方法中,调用 [self view] 以加载视图(如果已释放)。

或者,您可能需要考虑以下 hack。 UIViewController 防止视图卸载

于 2012-02-02T23:59:52.363 回答