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

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

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

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


当前回答

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

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

干杯理查德

其他回答

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

在我的例子中,在***ViewController类中实现了指定的初始值设定项-(instancetype)initWithNibName:(NSString*)nibNameOrNil捆绑包:(NSBundle*)nipBundleOrNil,因此即使我调用其他初始值设定器来初始化对象,也会调用指定的初始设置项。

因此,要解决这个问题,检查-(instancetype)initWithNibName:(NSString*)nibNameOrNil捆绑包:(NSBundle*)nipBundleOrNil是否也是一种正确的方法。

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

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

未设置视图标识-类标识。将其设置为适当的类后,问题得到解决。

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