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

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

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

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

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

今天突发奇想的,怎么加载一个xib中的Controller,于是自己实际操作了一把。这是我要加载的xib文件
正确的加载xib文件的View或者ViewController_第1张图片

加载的代码:

 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 > is associated with . Clear this association before associating this view with .'


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

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

ViewC *vc = [[NSBundle mainBundle] loadNibNamed:

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

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


正确的加载xib文件的View或者ViewController_第2张图片
问题解决啦!

你可能感兴趣的:(IOS)