【问题标题】:variable reset to default in realm变量在领域中重置为默认值
【发布时间】:2016-06-20 09:31:00
【问题描述】:

在 RealmSwift 中,我有一个对象,消息。

我正在使用 ObjectMapper 从 REST 服务映射其属性。我还想要一个本地属性 dynamic var read:Bool = false 来跟踪用户是否阅读了一条消息。

try! realm.write({
    m.read = true
})

我可以在 Realm Browser 中看到更新的值。

但是,每次我从服务中获取对象时,该变量都会重置为其默认值。我确定我做错了什么,但我不确定它是 RealmSwift 还是 ObjectMapper 的东西。

有什么想法吗?

【问题讨论】:

    标签: swift realm objectmapper


    【解决方案1】:

    我关于为什么会发生这种情况的假设是因为当您从服务器获取对象时,您会收到 JSON,然后您将其映射到新的 Message 对象(与之前的 Message 对象不同,您在其中设置了 @ 987654323@)。这些消息对象使用read = false 进行初始化,当它们被持久化在Realm 中时,false 值会覆盖之前存储的true 值。

    (据我所知,ObjectMapper 不允许您获取现有模型对象并使用新的 JSON 值“更新”或“重新填充”其值。)

    您可以尝试一些事情。您可以尝试检索您从 JSON 响应中创建的所有 Messages 的 read 的值,并在将新的 Message 对象上的 read 的值保存到领域之前更新它们。另一种选择是带外存储此信息:创建一个仅包含用户端信息的新对象类(例如,消息 ID 和 read 标志),并将这些信息与 Message 对象一起存储在领域中。

    【讨论】:

    • 我已经使用 RealmOptional 类型解决了。但是我仍然对为什么这不起作用感兴趣。我想你可能是对的。
    【解决方案2】:

    TL;DR:像这样声明变量:

    @objc dynamic var name : String = ""
    

    我正在使用 AlamofireObjectMapper (5.0.0) Realm (3.0.2) RealmSwift (3.0.2) 和 iOS 11

    class Category: Object, Mappable {
    (...) 
        @objc dynamic var name : String = ""
    (...)
    }
    

    一些视图控制器:

    lazy var categories: Results<Category> = { self.realm.objects(Category.self) }()
    

    没有动态类别会打印所有内容,但 categories[indexPath.row].name 会打印“”

    当我将动态添加到变量声明时,一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-14
      • 2017-01-02
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-16
      相关资源
      最近更新 更多