领域中的变量重置为默认值

时间:2016-06-20 09:31:01

标签: swift realm objectmapper

在RealmSwift中,我有一个Object,Message。

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

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

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

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

任何想法?

2 个答案:

答案 0 :(得分:0)

我为什么会发生这种情况的假设是因为当您从服务器获取对象时,您会收到JSON,然后您将其映射到新的<!DOCTYPE html> <html> <head> <style> *{ margin:0px; padding:0px; } body{ margin:10px 0px; } div.outer{ height:400px; width: 500px; margin:100px auto; margin-top: 130px; background-color:red; } div.length1{ height:380px; width:30px; margin:10px 470px 10px 0px; background-color:blue; } </style> </head> <body> <div class="outer"> <div class="length1"></div> <div class="breadth1"></div> <div class="length2"></div> <div class="breadth2"></div> </div> </body> </html> 对象(与先前的Message对象不同,其中你设置了Message)。这些消息对象使用read = true进行初始化,当它们在Realm中保留时,read = false值将覆盖先前存储的false值。

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

您可以尝试一些方法。您可以尝试检索从JSON响应中创建的所有true的{​​{1}}值,并在保存之前更新新read个对象上Message的值他们到了王国。另一种选择是在带外存储此信息:创建一个仅包含用户端信息的新对象类(例如消息ID和read标志),并将这些信息存储在您的{{1对象。

答案 1 :(得分: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打印“”

之外的所有内容

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