2015-10-22 37 views
3

好吧,我遇到了一個奇怪的問題,我來看看是否有人能幫我解釋一下。iOS 8的* some *版本中的自定義導航項目的內部不一致例外

背景

我的應用程序是針對支持的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,當用戶經過該賽格瑞一個NSInternalInconsistencyException被拋出,與錯誤

*終止應用程序由於未捕獲的異常「NSInternalInconsistencyException」,原因:「不能撥打 setItems:動畫:直接由 控制器管理的UINavigationBar的*'

然而,這裏的怪異的一部分,不會發生的iOS 8.4這個問題,我說我沒有。在iOS9下運行它。我還沒有測試8.2和8.3,但是沒有這樣做,我仍然沒有爲什麼iOS的某些版本會出現這種異常,而其他版本則不會。希望有人能夠指引我正確的方向。

回答

2

好吧,我已經找到了解決問題的方法,它涉及改變上面的代碼爲每NavigationBar,我不得不改變什麼的下面:

self.navigationItem.setLeftBarButtonItem(menuButtonItem, animated: true) 
self.navigationItem.setRightBarButtonItem(addButtonItem, animated: true) 
self.title = "Home" 

我把這個位置,以防有人否則會出現同樣的問題並且沒有解決方案,但我仍然對爲什麼只在特定版本的iOS上引發異常感到困惑,如果有人能告訴我爲什麼,那很好。

相關問題