【发布时间】:2020-12-19 08:21:18
【问题描述】:
我有一个 List 结构,它删除了带有 ondelete 的行,但是在返回结果时,该行被删除但显示错误。
我认为问题在于结果没有正确更新。
我应该添加什么代码来更新列表?
List{
ForEach(datosRealm.aquaris, id: \.self) { item in
Text(item.nombre)
}.onDelete { (indexSet) in
let aqua = datosRealm.aquaris[indexSet.first!]
let realm = try! Realm()
try! realm.write{
realm.delete(aqua)
}
}
}
import SwiftUI
import RealmSwift
final class DadesRealm: ObservableObject {
@Published var aquaris: [Aquaris]
private var cargaToken: NotificationToken?
init() {
let realm = try! Realm()
aquaris = Array(realm.objects(Aquaris.self))
recargarDatos()
}
private func recargarDatos() {
let realm = try! Realm()
let personas = realm.objects(Aquaris.self)
cargaToken = personas.observe { _ in
self.aquaris = Array(personas)
}
}
deinit {
cargaToken?.invalidate()
}
}
class Aquaris: Object {
@objc dynamic var nombre = ""
@objc dynamic var litros = ""
@objc dynamic var tipoAcuario = ""
@objc dynamic var data : Date = Date()
@objc dynamic var id = UUID().uuidString
override static func primaryKey() -> String? {
return "id"
}
let mascota = List<Controls>()
}
错误:
libc++abi.dylib:以未捕获的类型异常终止 异常 *** 由于未捕获的异常“RLMException”而终止应用程序,原因:“对象已被删除或无效。”以未捕获的方式终止 NSException 类型的异常
【问题讨论】:
-
假设您告诉编译器列出一个包含 n 个项目的数组。同时,您告诉编译器删除其中一个。您现在有 n-1 个项目。所以应用程序崩溃了。
-
这里没有足够的信息。如果您将 View 属性共享为领域对象定义(无论 datosRealm 和 datosRealm.aquaris 是什么),这将有所帮助