【问题标题】:Realm object property misses its value, but I can see it when printing the whole object领域对象属性错过了它的值,但我可以在打印整个对象时看到它
【发布时间】:2016-02-23 11:29:56
【问题描述】:

在尝试从我的 Realm(iOS、Swift、Realm 版本 0.98.2)获取对象时,我偶然发现了一件奇怪的事情

print("speaker:")
print(RealmProvider.appRealm.objects(FavoriteSpeaker).first!)

在控制台中正确转储我的对象:

speaker:
FavoriteSpeaker {
    name = Ashley Nelson-Hornstein;
}

但是当我尝试获取 name 属性的值时:

print("speaker name:")
print(RealmProvider.appRealm.objects(FavoriteSpeaker).first!.name)

我得到一个空字符串????

speaker name:

四行在我模型的init方法中是一起的


更新 1:我找到了一个答案,表明您在控制台中打印时只是看不到值:Realm object is missing all properties except primaryKey 但我也尝试通过警报显示 name 属性视图,那也是空的。


更新 2:只是为了确保一切都按顺序发生并且在同一个线程上发生,我这样做了:

let favorite1 = FavoriteSpeaker()
favorite1.name = "Debbie Downer"

try! RealmProvider.appRealm.write {
    RealmProvider.appRealm.deleteAll()
    RealmProvider.appRealm.add(favorite1)
}

print("speaker:")
print(RealmProvider.appRealm.objects(FavoriteSpeaker.self).first!)

print("speaker name:")
print(RealmProvider.appRealm.objects(FavoriteSpeaker.self).first!.name)

但结果是一样的——打印name会打印一个空字符串

【问题讨论】:

    标签: swift realm


    【解决方案1】:

    name 属性可能未声明为dynamic,这导致它读取存储在对象本身上的nil 值,而不是从领域读取数据。

    【讨论】:

    • 确实是这个问题,谢谢!不过,这让我开始思考——Realm 必须有一种方法可以在启动时检查这一点,Swift 确实有某种低劣的内省技巧......
    • 我们试图找到一种方法来检查非动态属性,但这似乎是不可能的,因为它没有直接暴露,而且 Mirror 读取内容的方式与实际使用该属性。
    • 很遗憾,因为这个问题将保证不断重新出现。我所有的对象都有它们的动态属性,但是这个特殊的对象是因为我决定最后添加它并且匆忙并且错过了将其标记为动态......?
    • 我从没想过这个+1!
    猜你喜欢
    • 1970-01-01
    • 2018-10-26
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    相关资源
    最近更新 更多