我有一个在我的应用程序中使用的 Core Data 数据模型,并且想向该数据模型添加一个我不一定要存储的属性,所以不是 @NSManaged我创建了该属性@Published。
@Published var currentTime = "00:00"
当然,在视图实例中,我使用 @ObservedObject
@ObservedObject var timeItem: TimeItem
在那个视图中,我使用计时器来更新该值
.onReceive(Timer.publish(every: 0.015, on: .main, in: .common).autoconnect()) { time in
timeItem.currentTime = timeItem.timeFinished.timeIntervalSince(Date()).editableStringMilliseconds()
}
但是,这不会触发视图更新。我不确定 NSManagedObject 是否应该受到责备,但如果我将 timeItem.currentTime 值替换为本地 @State 值,则一切正常。
@State private var currentTime: String = "00:00"
小伙伴们有什么想法吗?
答案 0 :(得分:0)
这里似乎有一个错误或其他什么。我有同样的问题。要解决此问题,您必须手动触发发布者:
@Published var currentTime = "00:00" {
willSet {
objectWillChange.send()
}
}
此时您甚至不需要 @Published
包装器。
要触发 @NSManaged
属性的更新,您可以覆盖 willChangeValue
方法。
override public func willChangeValue(forKey key: String) {
super.willChangeValue(forKey: key)
self.objectWillChange.send()
}
希望苹果尽快修复这个奇怪的行为。