錯誤描述: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";
}