正确的加载xib文件的View或者ViewController

可能很多人都非常熟悉了,在故事版中加载一个ViewController。

 ViewC *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"myController"];

[self.navigationController pushViewController:viewController animated:YES];

上面的这种情形是经常在,向navigationController中push一个ViewController的时候经常使用的。

今天突发奇想的,怎么加载一个xib中的Controller,于是自己实际操作了一把。这是我要加载的xib文件


加载的代码:

 ViewC *vc = [[ViewC alloc] initWithNibName:

 @"ViewC" bundle:[NSBundle mainBundle]];

 [self.navigationController pushViewController:vc animated:YES];

编译器爆出这样的错误:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "View" nib but the view outlet was not set.'

没有做nib文件到xxxViewControler程序的关联

1, 打开nib文件

2, 点击"File's Owner", 按command+4,设置Class为xxxViewControler

3, 按Control+"Files's Owner", 里面有个默认的IBOutlet变量view, 看一下后面有没有做关联,如果没有就拉到下面的View和视图做个关联

但关联过后会爆出下面的错误:

*** Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', reason: 'A view can only be associated with at most one view controller at a time! View <UIView: 0x7ff1d1522cd0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x7ff1d153f150>> is associated with <ViewC: 0x7ff1d154c060>. Clear this association before associating this view with <ViewC: 0x7ff1d1544dc0>.'


经过一番折腾,自己在不知不觉中找到了解决的方法:

原来不需要对xib文件进行修改,是加载方法的问题,直接使用下面的加载方法便可

ViewC *vc = [[NSBundle mainBundle] loadNibNamed:

    @"View" owner:nil options:nil ].lastObject;

[self.navigationController pushViewController:vc animated:YES];



问题解决啦!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值