在RealmSwift中,我有一个Object,Message。
我正在使用ObjectMapper从REST服务映射其属性。我还想要一个本地属性dynamic var read:Bool = false
来跟踪用户是否已阅读过消息。
try! realm.write({
m.read = true
})
我可以在Realm Browser中看到更新的值。
但是每次从服务中获取对象时,变量都会重置为其默认值。我确信我做错了,但我不确定它是不是RealmSwift或ObjectMapper。
任何想法?
答案 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
打印“”
当我向变量声明添加动态时,一切正常。