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

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

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

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


当前回答

我的问题是因为类文件夹中有一个没有视图集的重复笔尖。xcode似乎在为构建选择一个笔尖,然后在我下次构建项目时选择另一个。刚刚删除了另一个。看起来不错。多!

其他回答

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

如果您使用的是自定义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;
}

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

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

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