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

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

这是什么意思?

我该怎么解决呢?

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


当前回答

此错误指示已经连接的接口构建器对象在其所有者的源(文件的所有者)中被删除/重命名。

如果你看到一个感叹号,请在界面构建器中控制单击文件的所有者,你需要修复它。

在下图中,你可以看到“aRemovedView”在其右侧有一个感叹号,这是因为我删除了IBOutlet视图对象,而它已经在IB中连接。

这将给出以下错误: 终止应用程序由于未捕获异常'NSUnknownKeyException',原因:'[setValue:forUndefinedKey:]:这个类不是键值编码兼容键aRemovedView。'

其他回答

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

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

 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

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

我发现了另一种可能导致问题的可能性。

当使用initWithNibName方法使用错误的xib名称时,也会导致这种崩溃。

例如,您选择更改一个xib文件的名称,然后忘记将“initWithNibName”方法中使用的名称更改为相同的名称。

我收到了完全相同的错误信息,感谢http://www.idev101.com的Kira,我能够解决这个挑战。我是在谷歌搜索了所有这些线索后才找到她的网站的。我现在在这里发布下一个来到StackOverFlow的帖子,并且有同样的挑战,因为那个人最有可能通过谷歌来到这个线程。

我意识到,我错了:

UIViewController *deviceViewController = [[UIViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];

而不是这样:

DeviceViewController *deviceViewController = [[DeviceViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];

在哪里

DeviceViewController

我的类名也被称为

DeviceViewController.h 
DeviceViewController.m

你必须得

"import DeviceViewController.h"

在您的实现中(。m文件),你想调用例如另一个UIViewController。

如果我只是说明了像我这样的初学者,我绝对不会感到抱歉,因为这与问题并不完全相关,但我已经连续搜索了4个小时(?!?)来寻找这些错误消息的答案。如果我能把这个留给一两个人,那就太好了:)

PS:对于那些对如何继续加载其他UIViewController的代码感兴趣的人:

    [self presentViewController:deviceViewController animated:YES completion:nil];

当一个UI标签或其他UI元素被视图控制器类中的两个变量引用,而我删除了其中一个变量时,我也会遇到这种情况。