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

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

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

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


当前回答

对我来说,问题是由调用initWithNibName:bundle:引起的。我使用nib文件中的表视图单元格来定义表视图中的条目表单。因为我没有一个观点,所以用一个观点是没有意义的。相反,如果我改为调用initWithStyle:方法,并从那里加载nib文件,那么事情就如预期一样。

其他回答

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

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

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

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

我的问题出在错误的课堂上。我使用custom.xib作为自定义视图。正确设置如下:

视图不应有类与.xib一起使用的类在文件的所有者选项卡中设置Outlets连接到文件的所有者,而不是视图。

今晚我遇到了一个非常类似的东西,Swift UIViewController子类。在这种情况下,上述修复都不起作用,但重新排序我的代码确实起了作用。Net-Net,在同一文件中的子类定义本身之前出现子类的扩展似乎会混淆XCode,尽管编译很好;修复方法是将扩展放在子类的定义之后。

我已经在回答这个类似问题时发布了详细信息。

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