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

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

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

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


当前回答

对于使用xib方法创建UIView并遇到此问题的任何人,您都会注意到连接检查器菜单下没有“视图”出口。但是,如果您将File的Owners自定义类设置为UIViewController,那么您将看到“视图”出口,您可以通过CMND将出口连接到CustomView。

其他回答

您确定为ViewController的“view”属性分配了UIView(或子类)吗?

右键单击ViewController的xib左侧窗格中的“文件所有者”,并验证是否设置了“视图”出口。如果没有,请将其设置为视图!

这将明确解决该问题

在我的情况下,该视图没有在xib中查看。在xib中,视图为size=none(右侧第四个选项卡)。我将大小设置为Freeform并重新加载xCode。视图被上诉,我将正确的链接设置为“视图”。

打开viewController所在的故事板文件,或使用textEdit.app打开与XIB相关的文件,检查故事板或XIB名称是否与viewController相同,然后更改、保存并重新加载/重新启动Xcode。

当您有一个Swift代码使用@objc引用不同的命名空间时,请确保使用Objective-C类名:

@objc(NamespacedSomeViewController)
class SomeViewController: UIViewController {
....

在这种情况下,您需要在IB中使用NamespacedSomeViewController。

我遇到这个问题的方式与这里的其他答案略有不同。

如果我只是创建了一个新的xib文件,在Interface Builder中向其添加了一个UIViewController,并将该UIViewController的自定义类设置为视图控制器,则会导致“视图出口未设置”崩溃。这里的其他解决方案是控制将视图出口拖动到视图,但对我来说,视图出口是灰色的,我无法控制拖动它。

我发现我的错误是在Interface Builder中添加UIViewController。相反,我必须添加一个UIView,并将文件所有者的自定义类设置为视图控制器。然后我可以控制将文件所有者的视图出口拖动到我的新视图UIView中,一切都正常工作。