问题描述:
项目中创建了一个XBLoginViewController,并勾选了Also Create XIB file,于是项目中生成了XBLoginViewController.h,XBLoginViewController.m和XBLoginViewController.xib三个文件.
需要push或者modal这个xib时,使用[[XBLoginViewController alloc]init]创建,并且使用[[XBLoginViewController alloc] initWithNibName:nil bundle:nil]也是可行的.
但是!
但是!
但是!
当根据需求再在项目中创建一个继承UIView的XBLoginView时,使用上面的方法使用XBLoginViewController就会造成应用崩溃:
reason: ‘-[UIViewController _loadViewFromNibNamed:bundle:] loaded the “XBLoginView” nib but the view outlet was not set.’
而且,模拟器运行正常,只有真机报错崩溃.
字面含义是UIViewController在加载xib的过程中没有找到一个和XBLoginView连接的属性,无论你在XBLoginViewController中有没有使用到这个XBLoginView.
错误原因
创建UIViewController如果勾选了Also Create XIB file,再创建相应的控制器时,系统会自动在mainBundle中寻找同名的xib文件,所以不指定xib文件名也是可行的.但是如果项目中同时存在一个同名的View,那么系统会优先匹配这个View作为UIViewController的view,显然,这会导致crash.
解决方案
创建时指定xib名:[[XBLoginViewController alloc]initWithNibName:@"XBLoginViewController" bundle:nil];
网友评论