如何删除使用`createorupdate`时从服务器API中删除的Realm对象?
问题描述:
假设我有来自api的5个对象。如何删除使用`createorupdate`时从服务器API中删除的Realm对象?
我用realm.add(item, update: true)
存储它们,其中创建或更新 5个对象。
下次从服务器端删除一个项目。
所以,当我后来打电话API,领域对象的总数应为4。不5.
使用realm.add(item, update: true)
不会删除从API的未包含的项目。它仅存储添加或更新。
处理这个问题的最佳方法是什么?
答
这在概念上很简单,只需跟踪你从你的服务器响应看清物体,并删除其余:
var objectsToDeleteIDs = Set(realm.objects(Item.self).value(forKey: "id") as! [String])
realm.begineWrite()
for item in serverItems {
realm.add(item, update: true)
objectsToDeleteIDs.remove(item.id)
}
let objectsToDelete = realm.objects(Item.self).filter("id IN %@", objectsToDeleteIDs)
realm.delete(objectsToDelete)
try realm.commitWrite()
+0
使用'.map'并将每个ID追加到列表中会更快吗?然后使用相同的代码将其删除。 –
+1
当然还有很多其他的方法可以完成同样的事情,包括一些采用更多功能的方法。随意重构以匹配您喜欢的风格,或者改进您的用例中的性能。 – jpsim
我用这一招https://stackoverflow.com/a/39352718/2413303但代码是用Java编写的。仍然适用,实际上你甚至有'setValue'方法,这使得它更容易。 – EpicPandaForce