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

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

这是什么意思?

我该怎么解决呢?

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


当前回答

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

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

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

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

其他回答

有时这与“Inherit From Target”有关,这个值必须设置。对于单个目标应用程序,您只需选择从目标继承。如果您有多个目标,请选择所需的目标。

同样的问题。我的解决方案是在Main storyboard下拉菜单中放置正确的storyboard值。我重新命名了mainstoryboard。故事板,但不重置部署信息。

我收到了完全相同的错误信息,感谢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];

在我的例子中,这是因为引用了错误的Nib:

BMTester *viewController = [[BMTester alloc] initWithNibName:@"WrongNibName" bundle:nil];

我也遇到过同样的问题,虽然TechZen的答案可能确实令人惊讶,但我发现它很难适用于我的情况。

最终,我解决了这个问题,通过对象下列出的控制器(下图中突出显示)链接标签,而不是通过文件所有者。

希望这能有所帮助。