当 ForEach 中发生 onDelete 时如何更新其他 CoreData?

Posted

技术标签:

【中文标题】当 ForEach 中发生 onDelete 时如何更新其他 CoreData?【英文标题】:How to update other CoreData when onDelete occurs in a ForEach? 【发布时间】:2020-06-02 00:09:34 【问题描述】:

有两个实体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])
        
    

onDelete 发生时,我还想更新ParentChild 实体的其他属性。如何制作?

感谢您的帮助。

【问题讨论】:

【参考方案1】:

这是可能的方法

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
    

【讨论】:

以上是关于当 ForEach 中发生 onDelete 时如何更新其他 CoreData?的主要内容,如果未能解决你的问题,请参考以下文章

Swiftui foreach 索引超出范围 ondelete 问题

ForEach onDelete Mac

SwiftUI ForEach.onDelete 在 TabView 中无法正常工作

SwiftUI .onDelete 从 ForEach 获取 var

。onDelete在排序的ForEach中不起作用-SwiftUI

[当PHP代码失败但发送200时如何处理AJAX?