我的应用程序使用主菜单启动,该主菜单是名为UIViewController
的{{1}}的自定义子类。它嵌入在LVSMainViewController
中,它被设置为故事板中的初始VC。 UINavigationController
实施LVSMainViewController
。
点击按钮会将用户带到应用程序的不同部分(另一个VC)。用户通过连接到推送segue的按钮返回主菜单。但是当应用程序再次加载主菜单VC时,它会崩溃并显示以下消息:
2014-08-28 16:11:14.122 *断言失败 - [UIView layoutSublayersOfLayer:],/ SourceCache / UIKit_Sim / UIKit-2935.137 / UIView.m:8803
2014-08-28 16:11:14.257 *由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:'在向视图控制器发送-viewDidLayoutSubviews后仍然需要自动布局。 LVSMainViewController的实现需要将-layoutSubviews发送到视图以调用自动布局。'
SO上的其他帖子在以编程方式设置自动布局约束时报告相同的错误(我没有这样做,虽然我在故事板中使用自动布局)和/或使用-viewDidLayoutSubviews
时(我是虽然我在应用程序的其他地方使用它,但没有在主菜单VC或它所使用的VC中使用。 (请参阅here或here。)
其他难题:
我尝试在UITableView
的末尾添加[self.view layoutSubviews];
。当我这样做时它并没有崩溃。但由于Apple's documentation说
您不应该直接调用此方法。如果你想强迫一个 布局更新,请先调用setNeedsLayout方法 到下一个图纸更新。
如果我在-viewDidLayoutSubviews
的末尾添加[self.view setNeedsLayout];
,应用程序崩溃首先加载主菜单VC,而不是在我离开并返回时。
可能导致这种情况的原因??
答案 0 :(得分:14)
崩溃被神奇地修复的原因可能是因为您现在使用的是iOS 8.您是否尝试在iOS7上运行此代码?
通过致电[self.view layoutSubviews]
,您接近答案。
请尝试拨打[self.view layoutIfNeeded]
。
请参阅以下帖子:
答案 1 :(得分:-4)
在Xcode 6.0.1中神奇地修复了崩溃。