Xcode - 如何修复'NSUnknownKeyException'错误,原因:"...此类不符合键值编码的要求,无法为键X进行编码"?

1317
我正在尝试将一个在我的类中创建的UILabel与一个IBOutlet连接起来。
我的应用程序崩溃并显示以下错误:
*** 
Terminating app due to uncaught exception
'NSUnknownKeyException', reason: 
'[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]: 
this class is not key value coding-compliant for the key XXX.'

这是什么意思,我该如何修复?

15
Pedrotorres是正确的。 是的,这是正确的。如果您正在进行UITableViewCell,记住在IB中将File's Owner设置为NSObject,并将UITableViewCell的Class设置为您定义的.h类。 - gdm
4
当你遇到这样的问题,而冒犯的键是一个“动作”而不是一个“插座”,那么很可能你有一个“插座”错误地引用了你的“动作”函数名,而不是你的“插座”变量名。 - Alex Yursha
2
你应该注意到错误信息中键的名称(OP 称其为“XXXX”)是你在 nib 文件中命名的某个东西的名称。这应该有助于缩小你的搜索范围。 - kris
我提交了rdar://22105925,要求苹果在构建时更明显地显示这些错误。 :) - jtbandes
1
如何立即解决问题!https://dev59.com/0eo6XIcBkEYKwwoYOR0q#13812660 绝佳的技巧。 - Fattie
显示剩余6条评论
81个回答

1

出现了同样的问题。我的解决方案是在主故事板下拉菜单中放置正确的故事板值。我已经重命名了mainstoryboard.storyboard,但没有重置部署信息。


1
我曾经遇到过同样的问题,原因是在接口构建器中指定了一个模块(而不是留空)。所以,当我使用与我设置的不同模块时,应用程序会崩溃:S ...希望这能帮助其他人,因为我的问题不是由于损坏或过时的插座引起的!

1
当我将主故事板作为启动屏幕文件时,我遇到了同样的问题。我猜如果你使用一个故事板作为启动屏幕文件,它不应该连接到视图控制器,因为它还没有被加载。

1
我遇到了同样的问题,但原因不同:我将主故事板用作启动屏文件。我猜想如果你正在使用故事板作为启动屏文件,它不应该连接到视图控制器,因为它还没有被加载。

1
这可能意味着您正在尝试使用一个没有atsign开头的排序描述符,例如:
[array valueForKeyPath:@"distinctUnionOfObjects.self"]
实际上必须是:
[array valueForKeyPath:@"@distinctUnionOfObjects.self"]

1
对于我来说,我必须点击文件的所有者对象并导航到连接,删除有问题的连接。

1
这已经发生过两次了。 解决方案是重新制作整个故事板,因为我从另一个故事板复制它(因为它几乎相同)。

1
有时候Swift文件没有被添加或从目标中移除,可以前往目标 -> 构建设置 -> 编译源代码 -> 查看是否有任何必需的Swift类文件缺失。在我的情况下,应用程序因为编译中缺乏Swift源文件而崩溃了。

1
除了其他答案中提到的问题外,我自己制造错误的方法是从头开始创建一个项目,删除故事板的初始场景,然后将另一个项目的场景粘贴到我的故事板中。
这样做没有问题。您只需要添加一个故事板入口点,即勾选您喜欢的任何视图控制器上的“is initial View Controller”。否则,它将是一个灰色场景,并抛出一个错误。

enter image description here


1
当我将一个UIView链接到故事板并连接IBOutlet时,我遇到了这个问题:
@property (strong, nonatomic) IBOutlet UIView *someView

但后来,我将UIView变成了一个自定义类,但忘记了更改上面定义的这个IBOutlet的类名。这是一个奇怪的错误,因为如果自定义视图没有子视图,它不会报错,但一旦有子视图,它就会显示问题陈述中的错误,但在其中一个子视图而不是实际存在问题的外部UIView上。让我删除和重新添加所有子视图来尝试找到问题,当事实上与子视图无关。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接