*某些* 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 版本中的自定义导航项的内部不一致异常的主要内容,如果未能解决你的问题,请参考以下文章

iOS 12 中的自定义导航标题

“导航项中不支持普通样式”警告我的自定义条形按钮项

iOS 8 中的自定义键盘是不是可以使用新字符?

导航栏中的自定义字体截断使用分号而不是省略号

iOS 8和layoutMargin中的自定义UITableViewCells

iOS:带有面包屑路径的自定义导航栏?