3

在 RealmSwift 中,我有一个对象 Message。

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

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

我可以在领域浏览器中看到更新的值。

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

任何想法?

4

2 回答 2

0

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

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

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

于 2016-06-20T17:41:41.957 回答
0

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会打印“”

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

于 2017-11-27T09:11:07.833 回答