2017-06-01 84 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

相關問題