【问题标题】:setValue:forKey is always crashing in swiftsetValue:forKey 总是迅速崩溃
【发布时间】:2020-05-09 08:07:22
【问题描述】:

我有以下用例:

class Foo: NSObject {
    var bar = ""
}

let foo = Foo()
foo.setValue("A name", forKey: "bar") //throws exception: this class is not key value coding-compliant for the key bar.
print("Foo.bar: \(foo.bar)")

Apple 文档 (here) 指出,在 Swift 中,子类 NSObject 的每个类默认都符合键值。如果是这样,为什么我得到不符合键值的异常?

默认情况下,从 NSObject 或其子类之一继承的 Swift 对象的属性符合键值编码。

我错过了什么吗?有谁知道可能是哪个问题?

注意:我尝试将“bar”属性设为 NSString,但遇到了同样的异常。

【问题讨论】:

标签: ios swift iphone crash key-value-coding


【解决方案1】:

为属性实现 KVC(键值编码)支持。 您需要在您的属性上添加 @objc 注释, 由于目前KVC的实现是用Objective-C写的,加上@objc之后,Objective-c就可以看到了。

class Foo: NSObject {
    @objc var bar = ""
}
let foo = Foo()
foo.setValue("A name", forKey: "bar")
print("Foo.bar: \(foo.bar)")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多