这是我的设置:
在每个UIViewController viewWillAppear
方法上,我从服务器获取数据。数据被解析为领域对象,后来添加到Realm DB。我已设置通知块以报告结果是否发生任何更改。现在,问题是即使获取的对象与已写入DB的对象相同,RealmCollectionChange
仍会报告所有对象都被修改。这是一个示例代码:
获取/解析:
realmDB.beginWrite()
for projectJSON in projectsArray {
let project = createObjectFromJson(projectJSON)
realmDB.add(project, update: true)
}
realmDB.commitWrite()
更改观察员:
notificationToken = projects.addNotificationBlock { changes in
switch changes {
case .Update(_, let deletions, let insertions, let modifications):
...
}
所以在这里,修改总是返回完整的索引列表,就好像所有对象都已更新一样。
这是预期的吗?有什么方法可以避免这种行为?似乎add:update
强制更新,而不是在对象相同的情况下跳过更新。
答案 0 :(得分:2)
在createObjectFromJson方法中,几乎可以肯定设置对象属性,无论它们是否已更改。不幸的是,即使值相同,设置属性也会被检测为修改。我不确定这是否是预期的行为,但解决这个问题的一种方法是仅在新值不等于旧值时设置属性,尽管这可能会变得很难看。