*某些* iOS 8 版本中的自定义导航项的内部不一致异常
Posted
技术标签:
【中文标题】*某些* iOS 8 版本中的自定义导航项的内部不一致异常【英文标题】:Internal Inconsistency Exception with custom navigation items in *some* versions of iOS 8 【发布时间】:2015-10-22 00:13:42 【问题描述】:好的,所以我遇到了一个奇怪的问题,我在这里看看是否有人可以帮助向我解释这个问题。
背景
我的应用旨在支持 ios 8。
我所有的导航栏都嵌入在UINavigationController
中,每个栏在viewDidLoad
中设置如下(或多或少)
let newNavItem = UINavigationItem()
newNavItem.leftBarButtonItem = menuButtonItem
newNavItem.rightBarButtonItem = addBarItem
newNavItem.title = "Home"
self.navigationController?.navigationBar.setItems([newNavItem], animated: false)
问题
当用户首次注册时,他们会被转到一个屏幕,该屏幕允许他们选择要上传的个人资料图片或选择大学,具体取决于他们的注册方式(使用 Facebook,或不使用 Facebook )。在我所有的 iOS 9 测试中,我的主屏幕有一个导航栏,上面添加了按钮,这很好用。按钮已按预期设置并响应。然而,在 iOS 8.0.2 和 iOS 8.1 中,当用户通过这个 segue 时,会抛出一个 NSInternalInconsistencyException
,错误是
* 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法调用 setItems:animated: 直接在一个 UINavigationBar 上由一个 控制器。*'
然而,奇怪的是,这个问题在 iOS 8.4 中不会发生,正如我所说,我在 iOS 9 中根本没有遇到过。我还没有测试 8.2 和 8.3,但没有这样做,我仍然不确定为什么某些版本的 iOS 会因此异常而崩溃,而其他版本则不会。希望有人能够指出我正确的方向。
【问题讨论】:
【参考方案1】:好吧,我找到了解决问题的方法,它涉及为每个 NavigationBar
更改上面的代码,我必须将其更改为以下内容:
self.navigationItem.setLeftBarButtonItem(menuButtonItem, animated: true)
self.navigationItem.setRightBarButtonItem(addButtonItem, animated: true)
self.title = "Home"
我把它放在这里以防其他人遇到同样的问题并且没有解决方案,但我仍然对为什么只在某些版本的 iOS 上抛出异常感到困惑,如果有人可以告诉我为什么,那太好了。
【讨论】:
以上是关于*某些* iOS 8 版本中的自定义导航项的内部不一致异常的主要内容,如果未能解决你的问题,请参考以下文章