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

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

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

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


当前回答

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

其他回答

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

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

我也有同样的问题,我的问题是我在ViewControllers笔尖上添加了另一个本地化(英语),所以我的本地化德语应用程序找不到本地化英语的笔尖!!希望这对任何人都有帮助!

我对XCode 4.6.3也有同样的问题。我一开始使用了两个名为MySettingsView.h和.m的文件,但为了支持MySettingsViewController.h而删除了它们,但尽管尝试了这里提到的大多数提示,它仍然不断出错,

2013-07-05 11:48:17.205 MyApp[39024:c07]***由于未捕获的异常“NSInternalUnconferencyException”而终止应用,原因:'-[UIViewController _loadViewFromNibNamed:bundle:]加载了“MySettingsView”笔尖,但未设置视图出口。'

它显然仍然“困惑”,试图加载MySettingsView.xib而不是MySettingsView Controller.xib。也许它的“照我的意思做”逻辑太花哨了。

所以我通过在MySettingsViewController.m中硬编码NIB/XIB名称来解决这个问题:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:@"MySettingsViewController" bundle:nibBundleOrNil];
}

只是在我的项目中出现了相同的错误,但原因不同。在我的例子中,我的自定义UITableViewController类中有一个名为“View”的IBOutlet设置。我知道“视图”是特殊的,因为它是基类的成员,但我不认为视图(不同的情况)也会有问题。我猜Cocoa的某些区域不区分大小写,加载xib可能就是其中之一。所以我把它重命名为DefaultView,现在一切都好了。