Следующий код правильно отображает все «Пользователи» из базы данных Realm
в SwiftUI List
. Моя проблема заключается в удалении записей при смахивании строки.
Когда я смахиваю строку и нажимаю кнопку удаления, я сразу получаю ошибку uncaught exception
, List
не обновляется, но я знаю нужный элемент удаляется из базы данных Realm
, поскольку при следующем запуске приложения выбранная запись не отображается.
Вот мой код.
SwiftUI Code
import RealmSwift
struct ContentView: View {
@State private var allUsers: Results<User> = realm.objects(User.self)
var body: some View {
VStack{
Text("Second Tab")
List{
ForEach(allUsers, id:\.self) { user in
HStack{
Text(user.name)
Text("\(user.age)")
}
}.onDelete(perform: deleteRow)
}
}
}
private func deleteRow(with indexSet: IndexSet){
indexSet.forEach ({ index in
try! realm.write {
realm.delete(self.allUsers[index])
}
})
}
}
Модель области
import RealmSwift
class User:Object{
@objc dynamic var name:String = ""
@objc dynamic var age:Int = 0
@objc dynamic var createdAt = NSDate()
@objc dynamic var userID = UUID().uuidString
override static func primaryKey() -> String? {
return "userID"
}
}
ОШИБКА
Завершение работы приложения из-за необработанного исключения «RLMException», причина: «Индекс 4 выходит за пределы (должен быть меньше 4) . '
Конечно, 4
изменяется в зависимости от того, сколько элементов содержится в базе данных Realm
, в этом случае у меня было 5 записей, когда я проводил и нажимал кнопку удаления.
Я ожидал, что List
будет обновляться каждый раз при изменении переменной allUsers
@State, я знаю, что моя проблема не в полной мере понимает, как работает привязка.
Что я делаю неправильно?