2012-10-16 27 views
0

使用iOS 6 SDK升级xcode并编译我的应用后,我在应用中发生了很多崩溃。从我能够追踪到的内容看起来,UIKit的消息看起来像是在模态时使用视图控制器,而不是新创建的视图控制器。这是它的外观:UIKit消息在iOS 6的segue期间释放对象0

我有一个Tabbar控制器,它显示一个导航控制器。由导航控制器显示的另一个视图控制器显示一个模态视图控制器。

TabbarController - > NavigationController - > ViewController(呈现) - |显示使用模态segue | - >的ViewController(呈现)

步骤来使所述碰撞:

  1. 在层次结构中访问视图控制器(呈递)如上所示。它不是根视图cntrl但更高。
  2. 触发segue到模态视图控制器。
  3. 从标签栏(无论哪个)选择一个选项卡并返回到相同的视图控制器(呈现)。选择标签会在导航控制器上调用popToRoot。
  4. 再次触发模式SEGUE到视图控制器(提交)
  5. 崩溃:僵尸对象 - 视图 - 控制器(提交) - 得到了传递消息

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

另一件令我想知道的事情是,在iOS 5 Allocations Instrumentation工具从不向我显示保留计数= 0的View Controller(呈现),但iOS 6(之后它使其成为-1)。

我知道这可能是非常困难的问题来帮助我,但也许有人已经解决了iOS 6的问题和这样的segues?

从分配仪器仪表工具,我可以告诉大家,很多事情塞格斯的实施得到了改变在iOS 6

回答

1

我已经结束了实现自定义塞格斯呈现这些模态的看法。在这里看起来像一个很好的主意。 也许人们不应该在标签栏视图内显示模式视图?