调用setViewControllers后方向更改崩溃:动画:

dcc*_*rmo 6 objective-c orientation uinavigationcontroller ios

我一直处理这个(有点)随机的bug一段时间,无法弄清楚问题.上下文:我正在创建一个UISplitView iPad应用程序,在主视图中有一个UINavigationController:

主菜单为红色,子菜单为绿色,主要内容为紫色 主菜单为红色,子菜单为绿色,主要内容为紫色.

这个UINavigationController没有填满整个Master视图,因为我需要一些空间来拥有一个垂直菜单.当用户选择垂直侧菜单上的按钮时,它会为UINavigationController设置一些新内容,以显示带有选项的UITableView.我在每个菜单选择上做的是:

[self.subMenu setViewControllers:@[subMenuViewController] animated:YES];
Run Code Online (Sandbox Code Playgroud)

发生的事情是我不需要保留菜单历史记录,所以我每次都要为subMenu设置一个新的根视图控制器.

问题是当我开始搞乱设备方向时.它没有清晰的图案,但有时,在旋转时,我的应用程序崩溃了.现在,当我使用Instruments运行它时,这就是我得到的:

167 Zombie      -1  00:32.101.527   UIKit   -[UITableView _spacingForExtraSeparators]
Run Code Online (Sandbox Code Playgroud)

有趣的是,糟糕的访问发生在subMenu的前一个根视图控制器上.因此,如果我点击"事件"然后点击"播客",则在尝试访问"EventsViewController"时会发生错误访问.

所以我猜测在替换subMenu UINavigationController的根视图控制器的方式上有些不对,但我不确定它是什么.也许我需要确保在设置新的根视图控制器之前释放当前的根视图控制器?

任何帮助深表感谢.:)

dan*_*ata 2

因此,首先,您willRotateToInterfaceOrientation应该在willAnimateToInterfaceOrientation包含.didRotateToInterfaceOrientationUITableView

在每个方法中检查您的表视图数据源和委托。我认为这次崩溃是由委托或表视图的数据源的释放引起的。

此外,您还应该检查在旋转期间调用了哪些表视图 delgate/datasource 方法。

最后一件事,确保丢弃旧的实例,subMenuViewController并将它们从父视图控制器中正确删除。