在RealmSwift中,我有一个对象Message。
我使用ObjectMapper从REST服务映射它的属性。我还想要一个本地属性,dynamic var read:Bool = false
来跟踪用户是否阅读了一条消息。
try! realm.write({
m.read = true
})
我可以在Realm Browser中看到更新的值。
但是,每次我从服务获取对象时,该变量都会被重置为其默认值。我确信我做错了什么,但我不确定是RealmSwift还是ObjectMapper。
有什么想法吗?
发布于 2016-06-20 17:41:42
我的假设是,为什么会发生这种情况,是因为当您从服务器获取对象时,您会收到JSON,然后将其映射到新的Message
对象(与之前设置read = true
的Message
对象不同)。这些消息对象使用read = false
进行初始化,当它们持久化在领域中时,false
值将覆盖先前存储的true
值。
(据我所知,ObjectMapper不允许使用现有的模型对象并使用新的JSON值‘更新’或‘重新填充’它的值。)
您可以尝试以下几种方法。您可以尝试检索从JSON响应中创建的所有Message
的read
值,并在将新的read
对象保存到领域之前更新它们的Message
的值。另一种选择是在带外存储此信息:创建一个仅包含用户端信息(例如,消息ID和read
标志)的新对象类,并将这些信息与Message
对象一起存储在领域中。
发布于 2017-11-27 09:11:08
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
之外的所有内容"“
当我将dynamic添加到变量声明中时,一切都很正常。
https://stackoverflow.com/questions/37919011
复制