美文网首页
从xib加载UIViewController的一个坑

从xib加载UIViewController的一个坑

作者: wyymaomi | 来源:发表于2017-10-26 15:59 被阅读108次

    问题描述:

    项目中创建了一个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];

    相关文章

      网友评论

          本文标题:从xib加载UIViewController的一个坑

          本文链接:https://www.haomeiwen.com/subject/rqekpxtx.html