我试图将UILabel与在类中创建的IBOutlet链接起来。

我的应用程序崩溃与以下错误。

这是什么意思?

我该怎么解决呢?

***终止应用由于未捕获异常'NSUnknownKeyException',原因:'[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]:这个类不是键值编码兼容的键XXX。'


当前回答

你的xib可能连接不好。

这个错误我犯过很多次了。虽然TechZen的答案在这种情况下是绝对正确的,但另一个常见的原因是当您更改.h/中的IBOutlet属性的名称时。m,你已经连接到文件的所有者在nib。

从你的笔尖:

在IB中选择对象,然后转到“连接检查器”。 在“引用Outlets”下,确保你的对象没有仍然连接到旧的属性名…如果是,单击小的“x”删除引用并重新构建。

另一个常见的原因是,如果你使用Storyboard,你的UIButton可能有多个赋值(解决方案几乎与nib相同):

打开你的故事板,右击UIButton 您将看到该按钮有多个assign/ref。 删除一个带有小“x”的灰色“Main…”窗口:

其他回答

还有其他问题,你可以在其他答案中看到。 我为自己创建这个错误的方式是,我从头开始一个项目,首先删除故事板的初始场景,然后将另一个项目的场景粘贴到我的故事板中。

那样做没有问题。你只需要在你的故事板中添加一个入口点,也就是检查你喜欢的任何视图控制器上的初始视图控制器。否则它将是一个灰色的场景,并向您抛出一个错误。

导致这种情况的另一个原因是,您声明该属性实现为@dynamic,但类无法在父类中找到它。

我的麻烦的原因,是我复制了一个故事板文件(Xcode之外,如果我没有记错),然后所有视图控制器在复制的文件有相同的对象id在原始文件。补救办法是复制粘贴视图控制器,然后它们将获得一个新的object-ID。您可以在Identity Inspector中看到object-ID。

我在一个有两个目标(有自己的MainWindow XIB)的项目中遇到了类似的问题。对我来说,导致这个错误的根本问题是UIViewController类没有包含在第二个项目的资源列表中。例如,界面构建器允许我在主窗口中指定它。Xib,但在运行时系统无法定位类。

例如,cmd-点击有问题的UIViewController类,并仔细检查它是否包含在“Targets”选项卡中。

我得到了同样的错误,当我手动加载一个视图从一个笔尖。结果是我忘记设置视图的所有者。

例如,如果你以以下方式加载一个视图,

 let view = Bundle.main.loadNibNamed("MyNibFileName",
                                 owner: nil,
                                 options: nil)?.first as! UIView

然后添加一个IBOutlet, IBOutlet不能被引用,应用程序会因为上面的错误而崩溃。

修复:为视图分配一个所有者。

 let view = Bundle.main.loadNibNamed("MyNibFileName",
                                 owner: self,
                                 options: nil)?.first as! UIView