SwiftData批量删除列表选中项时崩溃的问题求助
SwiftData批量删除列表选中项时崩溃的问题求助
Update: 已提交反馈FB12498822
我正在把现有Core Data应用迁移到SwiftData前做技术调研,结果连一个简单的批量删除功能都卡壳了。我的需求很明确:让用户从列表里多选项目,然后点击删除按钮把选中项从数据库中移除。我基于Xcode的SwiftData项目模板开始开发,添加了多选支持和删除按钮,但每次尝试用删除按钮删除选中项时,都会在Item类id属性的@PersistedProperty宏处崩溃,不过通过滑动列表行删除单个项目是完全正常的。
下面是我的代码:
Item.swift
@Model final class Item { var title: String var id: String init(title: String) { self.title = title self.id = UUID().uuidString } } extension Item: Identifiable {}
ContentView.swift
struct ContentView: View { @Environment(\.modelContext) private var modelContext @Query private var items: [Item] @State private var selection: Set<Item.ID> = [] var body: some View { NavigationView { List(selection: $selection) { ForEach(items) { item in Text(item.title) } .onDelete(perform: deleteItems) } .toolbar { ToolbarItem(placement: .navigationBarTrailing) { EditButton() } ToolbarItem { Button(action: addItem) { Label("Add Item", systemImage: "plus") } } ToolbarItem { Button(action: deleteSelectedItems) { Label("Delete", systemImage: "trash") } } } Text("Select an item") } } private func deleteSelectedItems() { selection .compactMap { id in let predicate = #Predicate<Item> { $0.id == id } let descriptor = FetchDescriptor(predicate: predicate) let items = try? modelContext.fetch(descriptor) return items?.first } .forEach { modelContext.delete($0) } } private func addItem() { withAnimation { let newItem = Item(title: "New Item") modelContext.insert(newItem) } } private func deleteItems(offsets: IndexSet) { withAnimation { for index in offsets { modelContext.delete(items[index]) } } } }
我不确定是自己的实现哪里有问题,还是当前SwiftData beta版本存在bug,希望有经验的朋友能给我指条明路!
备注:内容来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

