【问题标题】:Realm Object fields are nil sometimes领域对象字段有时为零
【发布时间】:2016-12-19 17:09:06
【问题描述】:

我对 Realm 中的对象有一个奇怪的问题。当我从 Realm 数据库中获取一个对象时,有时它的某些字段(它只发生在 RealmOptionals 上)在访问它们后为零。

但这真的很奇怪,因为如果我在访问该字段之前放置一个断点并在 lldb 上执行 po object.field ,那么 nil 字段就会消失。 我已经看到,也许我忘记将这些字段设置为“动态”,但在我的情况下,按照 Realm 文档,我必须使用 RealmOptional 作为可选布尔值。

有人知道这里有什么问题吗?

提前致谢。

编辑:我用来从领域检索和对象的方法是:

    func getObject(atPosition position:Int)->Object{
        let objects = realm.objects(Object.self)
        return objects[position]
    }

【问题讨论】:

    标签: ios swift realm


    【解决方案1】:

    我不确定你在问什么。如果一个 Realm 属性被标记为可选,那么它的初始值将是nil,正如预期的那样。

    您是正确的,因为您需要使用 let propertyValue = RealmOptional<Bool>() 而不是 dynamic,因为普通的布尔数据类型无法单独表达 nil 值。所以这是dynamic 属性规则的一个例外。

    另外请注意,您需要使用optional.value 来设置可选的布尔值:

    class Dog: Object {
        dynamic var name = ""
        dynamic var age = 0
        let vaccinated = RealmOptional<Bool>()
    }
    
    let realm = try! Realm()
    
    let myDog = Dog()
    myDog.name = "Sherlock Bones"
    myDog.age = 4
    myDog.vaccinated.value = true
    
    try! realm.write {
       realm.add(myDog)
    }
    

    【讨论】:

    • 我刚刚观察到它不仅适用于 RealmOptional,还适用于动态字符串。我用一段代码更新了这个问题,我从 Realm 中检索了一个元素。非常感谢蒂姆在这两个问题上帮助我。你和 Realm 团队太棒了!
    • 我编辑了你的答案,因为你把我引向了正确的方向。感谢您的宝贵时间,感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多