协慌网

登录 贡献 社区

这是什么意思? “'NSUnknownKeyException',原因:... 此类不是键值 X 的键值编码兼容”

我正在尝试将UILabel与我班级中创建的IBOutlet

我的应用程序崩溃,出现以下错误。这是什么意思?我该如何解决?

*** 由于未捕获的异常'NSUnknownKeyException' 终止应用程序,原因:'[ setValue:forUndefinedKey:]:此类不是密钥 XXX 的密钥值编码。

答案

您的 xib 中可能连接不良。

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

从您的笔尖:

  1. 在 IB 中选择对象并转到 “Connections Inspector”。
  2. 在 “引用 Outlets” 下,确保您的对象仍未连接到旧属性名称... 如果是, 请单击小 “x” 以删除引用并再次构建。

    例1

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

  1. 打开故事板并右键单击 UIButton
  2. 您将看到此按钮有多个 assign / ref。使用小 “x” 删除其中一个 “Main ...” 灰色窗口:

    例2

你的视图控制器可能在你的 xib 中有错误的类。

我下载了你的项目。

你得到的错误是

'NSUnknownKeyException',原因:'[ setValue:forUndefinedKey:]:此类不是密钥值的密钥值编码兼容。

它是由MainWindow.xib中的Second视图控制器引起的,它具有一个UIViewController而不是SecondView 。更改为正确的类可以解决问题。

顺便说一句,在 Objective-C 中使用像 “string” 这样的名称是不好的做法。它会引发运行时命名冲突。即使在一次性练习应用程序中也避免它们命名冲突很难追查,你不想浪费时间。

此错误的另一个可能原因是:当将元素从一个控制器复制并粘贴到另一个控制器时,Xcode 会以某种方式将该链接保留到原始控制器,即使在编辑并将此元素重新链接到新控制器之后也是如此。

此错误的另一个可能原因:

坏口。

您已在.h文件中删除重命名了插座名称。

在删除它.xib.storyboard文件的连接检查。

我不得不从模拟器 / iPhone 中删除该应用程序以摆脱此错误。