从Realm删除笔记时App偶发崩溃问题求助
笔记删除时应用崩溃问题排查求助
删除App中的笔记时偶尔会出现崩溃情况,比如添加3条笔记后删除第一条就会崩溃,但有时添加多条笔记后删除却无异常。以下是相关代码及报错信息,请求帮忙排查问题。
ViewModel删除方法代码
func deleteNote(atIndex index: Int) { guard notes.indices.contains(index) else { return } do { let realm = try Realm() try realm.write { // 优化方案:从查询结果获取对象引用,避免失效 if let objectToDelete = realm.objects(Note.self).filter("id == %@", notes[index].id).first { realm.delete(objectToDelete) // Realm中删除成功后,从内存列表移除 notes.remove(at: index) } else { print("Note not found in Realm for deletion (index: \(index))") } } } catch { print("Error deleting note: \(error.localizedDescription)") } }
滑动删除触发代码
.onDelete(perform: { indexSet in guard let index = indexSet.first else { return } viewModel.deleteNote(atIndex: index) })
报错信息
**Error:** Exception NSException * "Object has been deleted or invalidated." 0x0000600000ca6ac0 name __NSCFConstantString * "RLMException" 0x0000000105ad44e0 reason __NSCFString * "Object has been deleted or invalidated." 0x00006000017a3280 userInfo __NSDictionaryM * 2 key/value pairs 0x000060000054fd00 reserved __NSDictionaryM * 2 key/value pairs 0x000060000054fcc0
我猜测错误出在realm.delete(objectToDelete)这一行。
获取笔记代码
func getNotes() { let realm = try! Realm() // 获取Realm实例 notes = Array(realm.objects(Note.self)) // 从Realm获取所有笔记 }
列表渲染代码
List { ForEach(viewModel.notes) { note in HStack { Toggle(isOn: Binding( get: { note.isCompleted }, set: { newValue in viewModel.markNoteAsCompleted(id: note.id) } ), label: { Text(note.title) .strikethrough(note.isCompleted) .foregroundStyle(note.isCompleted ? Color("grey") : Color("white")) }) .toggleStyle(iOSCheckboxToggleStyle()) } .padding(10) .listRowBackground(Color("backgroundLightSecond")) } .onDelete(perform: { indexSet in guard let index = indexSet.first else { return } viewModel.deleteNote(atIndex: index) }) .listRowSeparator(.hidden) } .listRowSpacing(10) .clipShape(.rect(cornerRadius: 15)) .scrollContentBackground(.hidden)
内容的提问来源于stack exchange,提问作者Max Elmers
相关产品推荐
相关产品推荐

