如何解决此问题:“此类不符合键值图像编码的键值”?

时间:2019-07-02 22:59:45

标签: xcode uiimageview swift4.2

我将我的代码从Objective-C转换为Swift的快要结束了,我开始将视图控制器类转换为Swift。我设法解决了大多数与视图控制器有关的问题,但我的一个View控制器却不断收到此错误。

当崩溃时:“线程1信号异常”

错误日志:

Terminating app due to uncaught exception 'NSUnknownKeyException', 
reason: '[<UIViewController 0x7fd98fc65ee0> setValue:forUndefinedKey:]: 
this class is not key value coding-compliant for the key background.'

注意:在这种情况下,“背景”是UIImageView插座。

我经历了多个解决方案,似乎没有一个对我有帮助。我尝试过:

  • 清理构建文件夹

  • 在模拟器上删除应用程序

  • 删除派生文件夹

  • 检查多余的IBOutlets

  • 删除连接并重新连接

  • 重命名插座

  • 在情节提要中检查额外的连接

  • 调试viewDidLoad()函数

这是我的代码:

IBOutlet var background: UIImageview!

override func viewDidLoad() {
    super.viewDidLoad()

    let image: UIImage = UIImage(named: UserDefaults.standard.string(forKey: "Background")!)!
    background.image = image
    ...
}

1 个答案:

答案 0 :(得分:3)

错误消息中显示了问题:

[UIViewController 0x7fd98fc65ee0> setValue:forUndefinedKey:]:

因此,您需要在情节提要中将此视图控制器的类设置为具有background属性的真实视图控制器的类。

您很有可能已经正确设置了此设置,但是它仅在Objective-C中有效。如果您进入身份检查器并删除该类,然后按回车键,然后再次输入该类,然后按回车键,您将看到现在身份检查器看到我们应该从Swift模块获取该类,一切将在Swift中开始。

基本上,根本原因可能是Swift的名称修改。名为MyClass的Objective-C类实际上称为MyClass,但没有名为MyClass的Swift类。删除名称并重新输入该名称会向Objective-C显示班级的新名称。