【问题标题】:What is the right way to present data from Realm in SwiftUI List在 SwiftUI 列表中呈现来自 Realm 的数据的正确方法是什么
【发布时间】:2020-04-11 16:29:35
【问题描述】:

我正在尝试从 Realm 获取所有项目并将它们显示在 SwiftUI List 中,但我一直收到错误消息。

UIKit/Realm 应用程序中,我只需创建一个Results 变量来存储来自Realm 的所有项目,然后我将在viewDidLoad 方法中获取项目并将它们分配给该变量。我正在尝试在SwiftUI 中做同样的事情,但我不确定如何构建我的代码,我一直收到错误消息说我的Realm 模型应该符合StringProtocol,我很确定这与我对BindingSwiftUI 缺乏了解有关。

同样,我要做的就是从Realm 获取所有项目并将它们显示在SwiftUI List 中。

这就是我所拥有的。

领域对象:

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"
    }
}

SwiftUI 代码:

struct ContentView: View {
    @State private var allUsers : Results<User>!
    var body: some View {
        VStack{
            List{
                ForEach(allUsers, id:\.self) { user in
                    Text(user) // the error points here
                }
            }
        }.onAppear(){
            self.updateUserResults()
        }
    }
    func updateUserResults(){
        allUsers = realm.objects(User.self)
    }
}

错误:

Initializer 'init(_:)' 要求 'User' 符合 'StringProtocol'

我错过了什么?

【问题讨论】:

    标签: ios swift realm swiftui swiftui-list


    【解决方案1】:

    你可能是这个意思

    ForEach(allUsers, id:\.self) { user in
        Text(user.name)
    }
    

    【讨论】:

    • 这绝对消除了错误,现在我在ForEach(allUsers, id:\.self) { user in 中收到错误Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value。在.onAppear() 中调用self.updateUserResults() 看起来不错吗?我可能在获取用户之前加载了List。谢谢
    • @fs_tigre,确实如此。您必须为allUsers 提供一些默认的空值。
    • 嗯,我真的不知道如何添加默认值。我尝试将allUsers 设为可选但没有运气。仅供参考 - 我确定我在 Realm 数据库中有记录。谢谢
    • 我更改了allUsers 以获取变量声明@State private var allUsers: Results&lt;User&gt; = realm.objects(User.self) 处的所有用户,现在它可以工作了。我会将您的答案标记为正确的答案,因为它使我找到了解决方案。
    猜你喜欢
    • 2015-04-08
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2019-04-25
    • 2020-06-12
    相关资源
    最近更新 更多