【问题标题】:UIKit messages deallocated object during segue on iOS 6UIKit 在 iOS 6 上的 segue 期间消息释放对象
【发布时间】:2012-10-16 10:38:54
【问题描述】:

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

我有一个显示导航控制器的标签栏控制器。 Navigation Controller 显示的另一个视图控制器显示了一个模态视图控制器。

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 的实现发生了很多变化。

【问题讨论】:

    标签: cocoa-touch ios6


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 2013-02-15
      • 1970-01-01
      相关资源
      最近更新 更多