【发布时间】:2020-03-29 19:12:14
【问题描述】:
在 iOS 13 上,NSManagedObject 的 objectWillChange 将在其属性更改时发出,但不会通知关系中的另一个 NSManagedObject。
我的临时解决方法如下:
class Child: NSManagedObject {
@NSManaged var parent: Parent?
override func willSave() {
super.willSave()
if isUpdated {
parent?.objectWillChange.send()
}
}
}
这行得通。但在我的情况下,模型更复杂:
class Child: NSManagedObject {
@NSManaged var parent: Parent?
override func willSave() {
super.willSave()
if isUpdated {
parent?.objectWillChange.send()
// NOTE
// how to let grandParents objectWillChange also omit?
}
}
}
class Parent: NSManagedObject {
@NSManaged var grandParents: Set<GrandParent>
override func willSave() {
super.willSave()
// call grandParents forEach objectWillChange.send() if isUpdated
}
}
在 NOTE 时,我可以迭代所有 grandParent 或 parent 并手动发送通知。但我相信有一个更好的通用解决方案可以使当对象脏时,父对象也会被标记为脏。然后关系中的所有对象将自动发布objectWillChange。有可能吗?
【问题讨论】:
-
我假设您使用的是 SwiftUI。您能否将单独的 @ObservedObject 添加到您希望视图依赖的每个 NSManagedObject,以便 SwifUI 可以在观察到的对象更改时自动更新视图。