SwiftUI - 如何在 CoreData 中删除实体中的行

Posted

技术标签:

【中文标题】SwiftUI - 如何在 CoreData 中删除实体中的行【英文标题】:SwiftUI - How to delete row in Entity in CoreData 【发布时间】:2020-04-22 19:48:58 【问题描述】:

我正在尝试开发一个应用程序来将值输入到列表中显示的实体中。但是当我从列表中删除它们时,它们并没有在数据库中删除。你有解决办法吗?

struct ViewList: View 
    @Environment(\.managedObjectContext) var context
    @State var newName: String = ""

    @FetchRequest(
        entity: ItProduct.entity(),
        sortDescriptors: [NSSortDescriptor(keyPath: \ItProduct.name, ascending: true)]
    ) var list: FetchedResults<ItProduct>


    var body: some View 
        VStack 
            HStack 
                TextField("I insert the name of the list", text: $newName)
                Button(action: 
                    if self.newName != "" self.add()
                    )  Image(systemName: "plus")
            
            List 
                ForEach(list, id: \.self)  i in
                    ViewItem(product: i)
                .onDelete  indexSet in
                    for index in indexSet 
                        self.context.delete(self.list[index])
                    
                
            
        
    

【问题讨论】:

【参考方案1】:

好吧,如果设置正确,那么您的代码应该可以工作。 除非...如果您正在寻找应用程序启动之间的数据持久性,在这种情况下,您需要在某个时间保存 CoreData 上下文。

try? self.context.save()

解决办法:

.onDelete  indexSet in
    for index in indexSet 
        self.context.delete(self.list[index])
        try? self.context.save()
    

【讨论】:

@MxM 很高兴为您提供帮助 :)

以上是关于SwiftUI - 如何在 CoreData 中删除实体中的行的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - 如何在 CoreData 中删除实体中的行

SwiftUI 如何使 CoreData 列表在 macOS 上可选择和可双击

SwiftUI CoreData - 如何更新获取请求和列表

使用 CloudKit + CoreData,如何在没有 SwiftUI 的 @FetchRequest 的情况下从远程云更新中更新 UI?

SwiftUI:如何将 CoreData 与动态过滤器相加?

SwiftUI:如何从 Siri Intent 添加 CoreData 记录