【问题标题】:@Published property inside an NSManagedObject doesn't trigger view updatesNSManagedObject 中的 @Published 属性不会触发视图更新
【发布时间】:2021-04-01 13:20:13
【问题描述】:

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

各位有什么想法吗?

【问题讨论】:

  • 你的对象是否实现了ObservableObject

标签: ios swift xcode core-data swiftui


【解决方案1】:

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

 @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()  
}

希望苹果能尽快解决这个奇怪的行为。

【讨论】:

    猜你喜欢
    • 2021-03-19
    • 2020-10-18
    • 2020-07-31
    • 2021-12-27
    • 2012-09-04
    • 2020-10-21
    • 1970-01-01
    • 2021-03-23
    相关资源
    最近更新 更多