我该如何解决这个问题:“这个类不符合关键图像视图的键值编码”?

Jam*_*jon 2 xcode uiimageview swift4.2

我即将将我的代码从 Objective-C 翻译成 Swift,我开始将视图控制器类切换到 Swift。我设法解决了视图控制器的大部分问题,但我的一个视图控制器不断收到此错误。

当它崩溃时:“线程 1 信号 sigabrt”

错误日志:

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

注意:在这种情况下,“背景”是一个 UIImageView Outlet。

我经历了多个堆栈 over flow 解决方案,但似乎没有一个对我有帮助。我试过了:

  • 清理构建文件夹

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

  • 删除派生文件夹

  • 检查额外的IBOutlets

  • 删除连接并重新连接

  • 重命名插座

  • 检查故事板中的额外连接

  • 调试 viewDidLoad() 函数

这是我的代码:

IBOutlet var background: UIImageview!

override func viewDidLoad() {
    super.viewDidLoad()

    let image: UIImage = UIImage(named: UserDefaults.standard.string(forKey: "Background")!)!
    background.image = image
    ...
}
Run Code Online (Sandbox Code Playgroud)

mat*_*att 5

错误消息中显示了问题:

[UIViewController 0x7fd98fc65ee0> setValue:forUndefinedKey:]:
Run Code Online (Sandbox Code Playgroud)

所以你需要把storyboard中这个view controller的class设置为真正拥有该background属性的view controller的class 。

很可能您已经正确设置了它,但它仅适用于 Objective-C。如果您进入身份检查器并删除该类,然后按回车键,然后再次进入该类并按回车键,您将看到现在身份检查器看到我们应该从 Swift 模块中获取这个类,事情将开始在 Swift 中工作。

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

  • 是的,你说得很好!我会将其添加到我的答案中。这是一个特殊情况,与模块中定义类的方式有关。我说“你忘记了”是不对的,我会改变这一点。谢谢。 (3认同)