我在项目中添加了一个新的nib文件,并尝试加载它。
然而,当我单击工具栏图标(该图标应将我带到我创建的视图)时,我会收到一个NSInternalInconstanceException,消息如下:
由于未捕获异常,正在终止应用“NSInternalInconstanceException”,原因:“-[UIViewController_loadViewFromNibNamed:bundle:]加载了“…”笔尖,但未设置视图出口
所以我打开了我的笔尖文件,看到了没有设置引用出口的视图。然而,我尝试单击并拖动“新引用出口”的圆圈到文件的所有者,但它不允许我……我需要做什么才能显示我的视图?
对我来说,当
我有一个与Nib文件关联的ViewController类(.mm/h),来自此ViewController的UIView必须作为子视图加载到另一个视图上,我们会这样称呼-(void)initCheckView{CheckView*pCheckViewCtrl=[CheckView实例];pCheckView=[pCheckViewCtrl视图];[[self-view]添加子视图:pCheckView];[pCheckViewCtrl-performCheck];}
哪里
+(CheckView *)instance{
static CheckView *pCheckView = nil;
static dispatch_once_t checkToken;
dispatch_once(&checkToken, ^{
pCheckView = [[CheckView alloc]initWithNibName:@"CheckView" bundle:nil];
if ( pCheckView){
[pCheckView initLocal];
**[pCheckView loadView];**
}
});
return pCheckView;
}
此处缺少loadView、、,添加此行解决了我的问题。
前面的答案几乎为我解决了问题,但最后一步却没有完成。
创建一个同名的xib和swift文件。
将文件所有者设置为UIView子类。
将一个出口从View拖到UIView子类,将其命名为“contentView”
添加此自定义初始值设定项,以便在xib加载时附加contentView
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
Bundle(for: self.classForCoder).loadNibNamed("SampleView", owner: self, options: nil)
addSubview(contentView)
contentView.frame = self.bounds
contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
}
现在,您添加的任何@IBOutlets都将被附加。
干杯理查德