2017-06-01 83 views
0

假设我有来自api的5个对象。如何删除使用`createorupdate`时从服务器API中删除的Realm对象?

我用realm.add(item, update: true)存储它们,其中创建或更新 5个对象。

下次从服务器端删除一个项目。

所以,当我后来打电话API,领域对象的总数应为4。不5.

使用realm.add(item, update: true)不会删除从API的未包含的项目。它仅存储添加或更新。

处理这个问题的最佳方法是什么?

+0

我用这一招https://stackoverflow.com/a/39352718/2413303但代码是用Java编写的。仍然适用,实际上你甚至有'setValue'方法,这使得它更容易。 – EpicPandaForce

回答

2

这在概念上很简单,只需跟踪你从你的服务器响应看清物体,并删除其余:

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

相关问题