ios - 如何从 SwiftUI 列表和 Realm 中删除数据

标签 ios realm swiftui swiftui-list

以下代码正确显示 Realm 中的所有“用户” SwiftUI 中的数据库 List .我的问题是滑动一行时删除记录。

当我滑动一行并点击删除按钮时,我立即得到一个 uncaught exception错误,List没有更新,但我知道正确的项目已从 Realm 中删除数据库,因为我下次运行应用程序时选择的记录没有显示出来。

这是我的代码。

SwiftUI 代码

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])
            }
        })
    }
}

Realm 模型
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"
    }
}

错误

Terminating app due to uncaught exception 'RLMException', reason: 'Index 4 is out of bounds (must be less than 4).'



当然,4根据 Realm 中的项目数量而变化数据库,在这种情况下,当我滑动并点击删除按钮时,我有 5 条记录。

我的期望是 List每次allUsers都会更新@State 变量更改,我知道我的问题不是完全理解绑定(bind)是如何工作的。

我究竟做错了什么?

最佳答案

My expectation was that the List was going to update every time the allUsers @State variable changes



这是正确的,但状态没有改变......以下应该工作
private func deleteRow(with indexSet: IndexSet){
    indexSet.forEach ({ index in
        try! realm.write {
            realm.delete(self.allUsers[index])
        }
    })
    self.allUsers = realm.objects(User.self)     // << refetch !!
}

注意:下面只是分配初始状态值
@State private var allUsers: Results<User> = realm.objects(User.self)

关于ios - 如何从 SwiftUI 列表和 Realm 中删除数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61165998/

相关文章:

ios - 如何在 Swift 的 ViewController 中显示动态数据

ios - 从 Realm 对象创建的用户具有相同的主键 Realm

macos - 如何在 macOS SwiftUI 中创建默认按钮?

ios - 下载未显示在 iTunes Connect 上?

ios - 在钥匙串(keychain)中保存数组

iOS后台队列检索数据两次?

ios - 在 SwiftUI 中检测 DragGesture 取消

ios - 在 FMX iOS 应用程序中隐藏应用程序切换器的屏幕截图

ios - Realm 对象已被删除或失效

ios - 如何使用 MVVM 设计模式绑定(bind)对象?