错误描述: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";
}