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

Ale*_*aev 5 xcode core-data ios swift swiftui

我有一个在应用程序中使用的 Core Data 数据模型,并且想向该数据模型添加一个我不一定想要存储的属性,因此我没有使用@NSManaged而是将该属性设置为@Published

 @Published var currentTime = "00:00"
Run Code Online (Sandbox Code Playgroud)

当然,在视图实例中,我使用@ObservedObject

 @ObservedObject var timeItem: TimeItem
Run Code Online (Sandbox Code Playgroud)

在该视图中,我使用计时器来更新该值

.onReceive(Timer.publish(every: 0.015, on: .main, in: .common).autoconnect()) { time in
     timeItem.currentTime = timeItem.timeFinished.timeIntervalSince(Date()).editableStringMilliseconds()
 }
Run Code Online (Sandbox Code Playgroud)

但是,这不会触发视图更新。我不确定是否应该归咎于NSManagedObject ,但如果我将timeItem.currentTime值替换为本地 @State 值,则一切正常。

@State private var currentTime: String = "00:00"
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

Gab*_*iel 2

看来这里有一个错误或其他什么。我有同样的问题。要解决此问题,您必须手动触发发布者:

 @Published var currentTime = "00:00" {
     willSet {
         objectWillChange.send()
     }
 }
Run Code Online (Sandbox Code Playgroud)

此时你甚至不需要@Published包装纸。

要触发属性更新,@NSManaged您可以覆盖willChangeValue方法。

override public func willChangeValue(forKey key: String) {  
    super.willChangeValue(forKey: key)  
    self.objectWillChange.send()  
}
Run Code Online (Sandbox Code Playgroud)

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