我在项目中添加了一个新的nib文件,并尝试加载它。

然而,当我单击工具栏图标(该图标应将我带到我创建的视图)时,我会收到一个NSInternalInconstanceException,消息如下:

由于未捕获异常,正在终止应用“NSInternalInconstanceException”,原因:“-[UIViewController_loadViewFromNibNamed:bundle:]加载了“…”笔尖,但未设置视图出口

所以我打开了我的笔尖文件,看到了没有设置引用出口的视图。然而,我尝试单击并拖动“新引用出口”的圆圈到文件的所有者,但它不允许我……我需要做什么才能显示我的视图?


当前回答

这是Josh Justice的提案,但以图形的方式(图片是我的):

选择文件所有者在右侧面板上选择自定义类。输入自定义类名

在右侧面板上选择出口拖动视图出口以查看组件

最后,使用滚动代码实例化视图控制器:

        PTFilterUserVC *aFilterUserVC = [[PTFilterUserVC alloc] initWithNibName:@"FilterVC" bundle:nil];

        //OPTIONAL.This is how 'I' am interested in present the view controller.
        [self.navigationController pushViewController:aFilterUserVC animated:YES];

其他回答

前面的答案几乎为我解决了问题,但最后一步却没有完成。

创建一个同名的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都将被附加。

干杯理查德

我也遇到了同样的问题,我发现这是因为我在Content选项下的Table View的财产中勾选了“Static cells”。当它变为“动态原型”时起作用。屏幕截图如下。

选择文件所有者,然后打开身份检查器,给出与之对应的类名。如果上述方法都不起作用,并且仍然无法看到视图出口,则将新的引用出口连接到文件所有者,则可以看到视图出口。单击视图Outlet以在视图Outlet和文件所有者之间建立连接。运行该应用程序,工作正常。

我通常可以通过重新创建File的所有者和视图之间的连接来修复它。控制从文件所有者拖动到视图(在IB中),并从弹出菜单中选择视图。

我想支持斯蒂芬·J。有些时候,X代码确实会感到困惑。我刚刚有过一次体验,我经常使用UI,并多次添加和删除了outlets。插座再也接不上电线了。我从来没有弄清楚具体的原因(我已经尝试了上面的所有解决方案),我只需要删除NIB并从头开始重新创建它,事实上,在NIB工作之前,它必须使用不同的名称。(XCode 4.6.1)为此浪费了几个小时。