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

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

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

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


当前回答

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

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

其他回答

如果您使用的是自定义init方法,请检查是否返回了有效的内容。我遇到了一段代码,它在这样的事情上崩溃了:

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
   } return self;
}

在另一个类中,控制器是这样创建的:

CustomController *controller = [[CustomController alloc] init];

问题是在init方法中,self没有改变,应该是这样的:

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
      [controller viewDidLoad];
      self = controller;
   } return self;
}

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

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

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

以下是对我有用的:

打开导致问题的XIB文件单击左栏上的文件所有者图标(顶部的一个,看起来像一个黄色轮廓框)如果您没有看到右侧边栏,请单击工具栏中“视图”上方的第三个图标。这将显示右侧边栏在右侧边栏中,单击第四个选项卡——看起来有点像报纸的选项卡在顶部的“自定义类”下,确保类是与此视图对应的ViewController的名称。如果没有,请输入在右侧边栏中,单击最后一个选项卡,该选项卡看起来像一个带箭头的圆圈你应该看到“outlets”下面有“view”。将旁边的圆圈拖到左栏上的“view”图标上(底部的一个,看起来像一个白色正方形,有一个粗灰色的轮廓保存xib并重新运行