Ios CoreData在保存筛选的FetchedResults时崩溃
我有一个fetchRequest,然后过滤FetchedResults数组。如果我在列表中显示过滤后的对象,并尝试删除其中一个并保存,则会崩溃 我得到这个错误代码:线程1:同时访问0x7FE28344B28,但修改需要独占访问 我试图用NSPredicate筛选fetchRequest,但随后它也崩溃了Ios CoreData在保存筛选的FetchedResults时崩溃,ios,swift,swiftui,Ios,Swift,Swiftui,我有一个fetchRequest,然后过滤FetchedResults数组。如果我在列表中显示过滤后的对象,并尝试删除其中一个并保存,则会崩溃 我得到这个错误代码:线程1:同时访问0x7FE28344B28,但修改需要独占访问 我试图用NSPredicate筛选fetchRequest,但随后它也崩溃了 struct ListView: View { @FetchRequest( entity: Item.entity(), sortDescriptors: [
struct ListView: View {
@FetchRequest(
entity: Item.entity(), sortDescriptors: []
) var itemList: FetchedResults<Item>
@Environment(\.managedObjectContext) var viewContext
var filteredItemList: Array<Item> {
return itemList.filter { $0.name == "TestItem1" }
}
var body: some View {
List {
ForEach(filteredItemList, id: \.self) { item in
Text(item.name)
}
.onDelete(perform: removeItem(at:))
}
}
private func removeItem(at offsets: IndexSet) { // Zum Entfernen von Sets durch Wischfunktion
for index in offsets {
let item = filteredItemList[index]
viewContext.delete(item)
}
try? self.viewContext.save()
}
}
结构列表视图:视图{
@获取请求(
实体:Item.entity(),排序描述符:[]
)var itemList:FetchedResults
@环境(\.managedObjectContext)变量viewContext
var filteredItemList:数组{
return itemList.filter{$0.name==“TestItem1”}
}
var body:一些观点{
名单{
ForEach(filteredItemList,id:\.self){中的项
文本(项目名称)
}
.onDelete(执行:removietem(在:))
}
}
私有函数删除项(偏移量处:索引集){//Zum Entfernen von set durch wischfunkion
对于偏移量中的索引{
let item=filteredItemList[索引]
viewContext.delete(项目)
}
试试?self.viewContext.save()
}
}
我找到了一种方法来延迟另一个堆栈溢出线程中的一些代码,现在它可以工作了。我用0.1秒的延迟测试了它。甚至可以在更小的延迟下工作 只需在removeItem函数中添加此代码
let seconds = 0.1
DispatchQueue.main.asyncAfter(deadline: .now() + seconds) {
//Put your code which should be executed with a delay here
try? self.viewContext.save()
print("Saved")
}
我想我找到了一种适合我的项目的方法。看看我的答案。