0

在升级 xcode 并使用 iOS 6 SDK 编译我的应用程序后,我在应用程序中遇到了很多崩溃。从我能够追踪的情况来看,UIKit 消息在模态 segue 期间释放了视图控制器,而不是新创建的。这是它的外观:

我有一个显示导航控制器的选项卡栏控制器。导航控制器呈现的另一个视图控制器显示了一个模态视图控制器。

TabbarController --> NavigationController --> ViewController (presenting) -- | 显示使用模态segue | --> ViewController(展示)

导致崩溃的步骤:

  1. 在上面显示的层次结构中访问视图控制器(呈现)。它不是根视图cntrl,而是更高。
  2. 触发模式视图控制器的 segue。
  3. 从选项卡栏中选择一个选项卡(无论哪个)并返回到同一个视图控制器(呈现)。选择一个选项卡会调用导航控制器上的 popToRoot。
  4. 再次触发视图控制器的模态序列(已展示)
  5. 崩溃:僵尸对象 - 视图控制器(呈现) - 收到消息

为什么?当调用 popToRoot 并且正在清理视图控制器(呈现)时,看起来就像在以前的 iOS 上一样,模态视图也被破坏了。因此,当它再次被访问时,它被重新创建并呈现。在 iOS 6 上,Allocations Instrumentation 显示模态视图与视图控制器(呈现)一起被破坏。但是当它由于某种原因被访问时,UIKit 创建了一个新的 modav 视图控制器,然后向不再存在的旧视图控制器发送消息。没有意义。

让我想知道的另一件事是,在 iOS 5 上,Allocations Instrumentation 工具永远不会向我显示保留计数 = 0 的视图控制器(已显示),但 iOS 6 会显示(之后将其设为 -1)。

我知道这可能是一个很难帮助我解决的问题,但也许有人已经在解决 iOS 6 和此类问题的问题了?

从 Allocations Instrumentation 工具中,我可以看出 iOS 6 上 segue 的实现发生了很多变化。

4

1 回答 1

1

我最终实现了自定义 segues 来呈现这些模态视图。在这里似乎是一个很好的主意。也许不应该在标签栏视图中显示模态视图?

于 2012-10-17T11:07:58.283 回答