首页 > 解决方案 > 当 ForEach 中发生 onDelete 时如何更新其他 CoreData?

问题描述

有两个实体ParentChild,这是一对多的关系。一位父母和许多孩子。

EditMode用来删除Child数据,例如:

@ObservedObject private var db = CoreDataDB<Child>(predicate: "parent")

var body: some View {

    VStack {
        Form {

            Section(header: Text("Title")) {
                ForEach(db.loadDB(relatedTo: parent)) { child in

                    if self.editMode == .active {
                        ChildListCell(name: child.name, order: child.order)
                    } else {
                        ...
                    }
                }
                .onDelete(perform: self.db.deleting)   <--- How to update CoreData when delete occurs in this line
            }
        }
    }
}

deleting方法在另一个类中定义,例如:

public func deleting(at indexset: IndexSet) {

    CoreData.executeBlockAndCommit {

        for index in indexset {
            CoreData.stack.context.delete(self.fetchedObjects[index])
        }
    }
}

而且我还想在发生时更新其他属性ParentChild实体onDelete。怎么做?

谢谢你的帮助。

标签: ioscore-dataswiftui

解决方案


这是可能的方法

Section(header: Text("Title")) {
    ForEach(db.loadDB(relatedTo: parent)) { child in

        if self.editMode == .active {
            ChildListCell(name: child.name, order: child.order)
        } else {
            ...
        }
    }
    .onDelete { indices in 
      // make other update here ...

      self.db.deleting(at: indices)

      // ... or here
    }
}

推荐阅读