从xib加载UIViewController的一个坑

项目中创建的UIViewController与同名UIView导致应用崩溃。错误原因是系统优先匹配同名View作为UIViewController的view,但view outlet未设置。解决方案是在创建UIViewController时指定xib名称。
摘要由CSDN通过智能技术生成

问题描述:

项目中创建了一个XBLoginViewController,并勾选了Also Create XIB file,于是项目中生成了XBLoginViewController.h,XBLoginViewController.mXBLoginViewController.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];

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值