Core data 删除SwiftUI列表中的项目后(由核心数据支持),得到一个;线程1:EXC“错误”指令;错误?(附代码)

Core data 删除SwiftUI列表中的项目后(由核心数据支持),得到一个;线程1:EXC“错误”指令;错误?(附代码),core-data,swiftui,swiftui-list,Core Data,Swiftui,Swiftui List,在完成对SwiftUI列表中的一行的删除后,我得到了一个“thread1:EXC_BAD_指令”错误。核心数据删除的工作方式似乎与我重启后删除的数据相同。因此,可能与SwiftUI在执行核心数据删除后试图更新其视图有关 代码: 导入快捷界面 导入CoreData 结构ContentView:View{ @环境(\.managedObjectContext)变量上下文 @FetchRequest(实体:GCItem.entity(),sortDescriptors:[])变量gcItems:Fet

在完成对SwiftUI列表中的一行的删除后,我得到了一个“thread1:EXC_BAD_指令”错误。核心数据删除的工作方式似乎与我重启后删除的数据相同。因此,可能与SwiftUI在执行核心数据删除后试图更新其视图有关

代码:

导入快捷界面
导入CoreData
结构ContentView:View{
@环境(\.managedObjectContext)变量上下文
@FetchRequest(实体:GCItem.entity(),sortDescriptors:[])变量gcItems:FetchedResults
专用函数附加项(标题:字符串){
让newItem=GCItem(上下文:context)
newItem.id=UUID()
newItem.title=标题
做{
尝试context.save()
}把e当作错误来抓{
fatalError(“未解决的错误\(e),\(e.userInfo)”)
}
}
private func deleteItem(偏移量处:IndexSet){
self.context.perform{
//删除项目
对于偏移量中的索引{
let item=self.gcItems[索引]
self.context.delete(项)
}
//坚持
做{
尝试self.context.save()
}把e当作错误来抓{
//TODO:如何取消删除列表???
打印(“错误:无法保存GCItem项目:\(e.description)”)
}
}
}
var body:一些观点{
导航视图{
VStack{
列表(){
ForEach(gcItems){gcItem in
HStack{
文本(“测试”)
}
}
.onDelete(执行:self.deleteItem)
}
按钮(操作:{self.addItem(标题:“Testing 123”)}){
文本(“添加项”)
}
}
}
}
}
#如果调试
结构内容视图\u预览:PreviewProvider{
静态var预览:一些视图{
让上下文=(UIApplication.shared.delegate为!AppDelegate)。persistentContainer.viewContext
返回ContentView().environment(\.managedObjectContext,context)
}
}
#恩迪夫
截屏


解决方案是不在名为“id”的核心数据中使用属性。所以我把它改成了“myId”,然后一切正常。

我自己也开始为这个问题发狂。只是好奇,你是怎么发现的?只是猜测/试试看
import SwiftUI
import CoreData

struct ContentView: View {
    @Environment(\.managedObjectContext) var context
    @FetchRequest(entity: GCItem.entity(), sortDescriptors: []) var gcItems: FetchedResults<GCItem>

    private func addItem(title:String) {
        let newItem = GCItem(context: context)
        newItem.id = UUID()
        newItem.title = title
        do {
            try context.save()
        } catch let e as NSError {
            fatalError("Unresolved error \(e), \(e.userInfo)")
        }
    }

    private func deleteItem(at offsets:IndexSet) {
        self.context.perform {
            // Delete Item
            for index in offsets {
                let item = self.gcItems[index]
                self.context.delete(item)
            }

            // Persist
            do {
                try self.context.save()
            } catch let e as NSError {
                // TODO: How to undelete list???
                print("ERROR : Can not save GCItem items: \(e.description)")
            }
        }
    }

    var body: some View {
        NavigationView {
            VStack {
                List() {
                    ForEach(gcItems) { gcItem in
                        HStack {
                            Text("test")
                        }
                    }
                    .onDelete(perform: self.deleteItem)
                }
                Button(action: { self.addItem(title: "Testing 123") }) {
                    Text("ADD ITEM")
                }
            }
        }
    }
}
#if DEBUG
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
        return ContentView().environment(\.managedObjectContext, context)
    }
}
#endif