NSManagedObject 中的 @Published 属性不会触发视图更新

时间:2020-12-22 20:32:11

标签: ios swift xcode core-data swiftui

我有一个在我的应用程序中使用的 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"

小伙伴们有什么想法吗?

1 个答案:

答案 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()  
}

希望苹果尽快修复这个奇怪的行为。