我试图观察核心数据实例中对象中的任何更改。这是我的代码:
class MyClass {
@objc dynamic var str: String?
}
final class Article: NSObject {
@objc dynamic var title: String?
@objc dynamic var summary: String?
var myVar: MyClass?
}下面是我正在执行的观察员:
func update(article: Article) {
titleSubscription = article.publisher(for: \.title).sink { value in
print(value)
} receiveValue: { _ in
print("I got something")
}
summarySubscription = article.publisher(for: \.myVar?.str).sink{ _ in
} receiveValue: { _ in
}
}但我发现了一个错误:
Thread 1: Fatal error: Could not extract a String from KeyPath Swift.KeyPath<Examples.Article, Swift.Optional<Swift.String>>

你们中有谁知道我为什么会犯这个错误,或者有没有工作要做?
我非常感谢你的帮助。
发布于 2021-10-20 05:02:23
您正在尝试创建一个使用键值观察的发布服务器。键值观察是Objective运行时的一个特性.通过在title和dynamic上放置@objc和dynamic,您已经将属性@objc和dynamic公开到了Objective运行时。然而,myVar是一个普通的实例变量,而不是一个可观察的属性。所以键值编码系统找不到它,在运行时你会得到一个错误。
文件载于
他说
为键值观察注释一个属性。
使用@objc属性和动态修饰符通过键值观察来标记要观察的属性。
此外,要参与键值编码,MyClass还必须可供目标C使用,并且必须具有您希望从密钥-键值观察中访问的属性:
class MyClass : NSObject {
@objc dynamic var str: String?
}
final class Article: NSObject {
@objc dynamic var title: String?
@objc dynamic var summary: String?
@objc dynamic var myVar: MyClass?
}https://stackoverflow.com/questions/69638458
复制相似问题