加载的笔尖但"视图"插座未设置

Joh*_*ohn 722 cocoa-touch interface-builder xib ios

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

但是,当我点击应该带我到我创建的视图的工具栏图标时,我得到一条NSInternalInconsistencyException消息:

由于未捕获的异常'NSInternalInconsistencyException'终止应用程序,原因:' - [UIViewController _loadViewFromNibNamed:bundle:]加载了"..."笔尖,但未设置视图插座.

所以我打开了我的nib文件,我看到没有设置引用插件的视图.但是,我尝试单击并将"新引用插座"的圆圈拖动到文件所有者,但它不会让我...我需要做什么才能显示我的视图?

Jos*_*ice 1763

你们是对的,但是因为我是一个新人,我花了一点时间才弄清楚要做的所有步骤.这对我有用:

  • 打开XIB文件导致问题
  • 单击左侧栏上的文件所有者图标(顶部一个,看起来像一个黄色的方框)
  • 如果您没有看到右侧边栏,请单击工具栏中"视图"上方的第三个图标.这将显示右侧边栏
  • 在右侧边栏中,单击第三个选项卡 - 看起来有点像报纸的选项卡
  • 在顶部的"自定义类"下,确保Class是应与此视图对应的ViewController的名称.如果没有,请输入它

自定义类配置

  • 在右侧边栏中,单击最后一个选项卡 - 看起来像一个带箭头的圆圈
  • 您应该看到"outlet"下面带有"view".将旁边的圆圈拖到左侧栏上的"视图"图标(底部的一个,看起来像一个带有灰色粗轮廓的白色方块

自定义类配置

  • 保存xib并重新运行

  • 从步骤4和5开始,此解决方案不再适用于Xcode 7.3.而是在界面构建器中,按住Control键从文件所有者拖动到View. (9认同)
  • 不适用于我(连接检查器中没有“插座”部分,因此在要连接的插座下没有“视图”),但是为您付出的努力而+1。:) (2认同)
  • 如果您在插座中没有看到“视图”,您还可以通过 ctlr-drag 从文件所有者到故事板上的视图。应该出现一个带有“查看”选项的上下文菜单 (2认同)
  • @WilliamT.Mallard 我也有同样的行为。`MyViewController` 是`UIViewController` 的子类的子类,“Outlets”下没有`view`。如果我直接从`UIViewController` 子类化`MyViewController`,则视图会出现在“Outlets”下。Xcode 的魔法或错误。 (2认同)

Jav*_*ría 180

这是Josh Justice的提议,但是以图形方式(图片是我的):

  1. 选择文件所有者
  2. 在右侧面板上选择自定义类.
  3. 输入自定义类名称

在此输入图像描述

  1. 在右侧面板上选择oultets
  2. 拖动视图出口以查看组件

在此输入图像描述

最后,使用滚动代码实例化View Controller:

        PTFilterUserVC *aFilterUserVC = [[PTFilterUserVC alloc] initWithNibName:@"FilterVC" bundle:nil];

        //OPTIONAL.This is how 'I' am interested in present the view controller.
        [self.navigationController pushViewController:aFilterUserVC animated:YES];
Run Code Online (Sandbox Code Playgroud)


Roh*_*wal 73

我通常可以通过重新创建File的Owner和视图之间的连接来解决它.按住Ctrl键从文件所有者拖动到View(在IB中),然后从弹出菜单中选择视图.


Joh*_*ohn 60

未设置View Identity - Class Identity.将其设置为适当的类后,问题得到解决.


She*_*han 29

你确定你有一个UIView(或子类)分配给你的ViewController的"view"属性?

右键单击xib左侧窗格中的"文件所有者",查看yourViewController并验证是否设置了"视图"插座.如果没有,请将其设置为视图!

这肯定会解决问题

  • 清晰、简洁的答案。 (3认同)

Nat*_*han 15

我对XCode 4.6.3也有同样的问题.我已经开始使用一些名为的文件MySettingsView.h,.m但是删除了它们MySettingsViewController.h,但是尽管尝试了这里提到的大多数提示,但它仍然存在错误,

2013-07-05 11:48:17.205 MyApp [39024:c07]***由于未捕获的异常'NSInternalInconsistencyException'终止应用程序,原因:' - [UIViewController _loadViewFromNibNamed:bundle:]加载了"MySettingsView"笔尖但视图出口没有定."

它显然仍然"困惑",试图加载MySettingsView.xib而不是MySettingsView 控制器 .xib .也许它的"做我的意思"逻辑过于花哨.

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

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


vis*_*kar 14

对我来说,https: //stackoverflow.com/a/6395750/939501 所述的所有内容都是正确的,但仍然是抛出错误,原因是我创建了一个名为ABCView的View类,然后将其删除后我添加了一个视图控制器ABCViewController因此不知何故它在新的视图控制器中引用旧的ABCView,我不得不删除ABCViewController并添加一个具有不同名称的新的解决了我的问题.

谢谢


man*_*ate 10

对于使用xib方法创建UIView并遇到此问题的任何人,您会注意到在连接检查器菜单下您将没有"视图"插座.但是,如果您将文件所有者自定义类设置为UIViewController,然后您将看到"视图"插座,您可以通过CMND将插座连接到CustomView.


Bri*_*dig 10

我遇到这个问题的方式与这里的其他答案略有不同。

如果我只是创建了一个新的 xib 文件,在 Interface Builder 中向它添加了一个 UIViewController,并将该 UIViewController 的自定义类设置为我的视图控制器,则会导致“未设置视图插座”崩溃。这里的其他解决方案说控制拖动视图出口到视图,但对我来说视图出口是灰色的,我无法控制拖动它。

灰色的 View 插座

我发现我的错误是在 Interface Builder 中添加了一个 UIViewController。相反,我必须添加一个 UIView,并将文件所有者的自定义类设置为我的视图控制器。然后我可以控制拖动文件所有者的视图出口到我的新视图 UIView 并且一切正常。


小智 7

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


小智 5

刚刚花了一个多小时试图找出为什么从笔尖启动视图属性时未在视图控制器中设置视图属性的原因。请记住在视图控制器的initWithNibName内部调用“ [super initWithNibName ...]”。


小智 5

我也遇到了同样的问题,我的问题是我向 ViewControllers 笔尖添加了其他本地化(英语),因此我的具有本地化德语的应用程序可以 \xc2\xb4t 找到具有本地化英语的笔尖!希望这对任何人都有帮助!

\n


Ste*_*n J 5

我只是把这个固定在我的。大项目,两个文件。一个是“ ReallyLargeNameView”,另一个是“ ReallyLargeNameViewController”

根据上面选择的第二个答案,我决定应该清理自己的构建。Nada,但我仍然怀疑XCode(因为我有两个相同的类,应该对它们进行抽象,但是……)所以,一个人在工作,一个人不在。文件的所有者名称已达到复制和粘贴的程度,重新命名了出口,重新启动了xCode,仍然一无所获。

因此,我删除了类似的命名类(这是一个视图)。很快,新错误“字面上的插座未连接”实际上是“ webView不是键值”等等……基本上是说“ Visual Studio更好”。无论如何...我删除了较小的命名文件,并且bam,它起作用了。

XCode被名称相似的文件所混淆。该项目足够大,需要重新启动,这可能是其中的一部分。

希望我能得到比“ XCode混乱”更多的技术答案,但是好了,xCode在这一点上变得非常混乱。不用困惑,就像我会帮助一个小孩一样。它现在可以工作,:)如果上述方法不能解决问题,则应该使他人受益。

永远记住要清理构建(也要删除模拟器)


Nid*_*hin 5

我在意外删除 xib 引用并再次添加时遇到了同样的问题。我只是通过在文件所有者和视图之间建立连接来修复。还要确保您的 FilesOwner 的自定义类是您期望的 viewController。


COS*_*KER 5

之前的答案几乎为我解决了问题,但缺少最后一步。

  1. 创建一个同名的 xib 和 swift 文件。

添加视图和 Swift 文件

  1. 将文件所有者设置为 UIView 子类。

在此处输入图片说明

  1. 将一个插座从 View 拖到 UIView 子类中,将其命名为“contentView”

添加内容视图

  1. 添加此自定义初始值设定项,以便在 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]
    }

Run Code Online (Sandbox Code Playgroud)

现在将附加您添加的任何@IBOutlets。

干杯,理查德