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)
有什么想法吗?
看来这里有一个错误或其他什么。我有同样的问题。要解决此问题,您必须手动触发发布者:
@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)
我希望苹果能够尽快修复这个奇怪的行为。
| 归档时间: |
|
| 查看次数: |
450 次 |
| 最近记录: |