iOS xib崩潰問題

錯誤描述:Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "ServiceMoreDetailedView" nib but the view outlet was not set.'

出錯場景:我在ServiceMoreDetailedViewController中,用到了與其名稱有重複部分的"ServiceMoreDetailedView"作爲其中一個子視圖,則會出現上述崩潰現象,此時只需在ServiceMoreDetailedViewController中添加一個系統方法,返回它自己的xib文件名即可,這樣就可以消除命名衝突(見方法三)。

可能引起這種錯誤的原因我將其歸爲以下三種:


原因一:

沒有做nib文件到xxxViewControler程序的關聯,解決方法爲:

1, 打開nib文件。

2, 點擊"File's Owner", 按command+4,設置Class爲xxxViewControler。

3, 按Control+"Files's Owner", 裏面有個默認的IBOutlet變量view, 看一下後面有沒有做關聯,如果沒有就拉到下面的View和視圖做個關聯。


原因二:

可能是xcode的問題,xcode本身自帶記憶功能,可能你已經修改,或者刪除,但是xcode無法識別,繼續用默認的,所以出上面方法以外,可以重新建立xib 並且給予不同view名字。

原因三:

這種情況確實難以察覺,即使是清理了工程緩存或者是重新創建了xib文件,更新了xib的名字,但運行的時候,還是一樣會崩潰。此時我的解決辦法是:在用到這個xib文件的controller中,返回這個controller自身的nib文件的名字(如果這個controller是使用xib創建的)。我的代碼如下:

#pragma mark - 返回當前viewController的nibName,避免XCode自動關聯類似名稱的nib文件導致系統崩潰

- (NSString *) nibName {

   return  @"ServiceMoreDetailedViewController";

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章