假設我有來自api的5個對象。如何刪除使用`createorupdate`時從服務器API中刪除的Realm對象?
我用realm.add(item, update: true)
存儲它們,其中創建或更新 5個對象。
下次從服務器端刪除一個項目。
所以,當我後來打電話API,領域對象的總數應爲4。不5.
使用realm.add(item, update: true)
不會刪除從API的未包含的項目。它僅存儲添加或更新。
處理這個問題的最佳方法是什麼?
假設我有來自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()
使用'.map'並將每個ID追加到列表中會更快嗎?然後使用相同的代碼將其刪除。 –
當然還有很多其他的方法可以完成同樣的事情,包括一些採用更多功能的方法。隨意重構以匹配您喜歡的風格,或者改進您的用例中的性能。 – jpsim
我用這一招https://stackoverflow.com/a/39352718/2413303但代碼是用Java編寫的。仍然適用,實際上你甚至有'setValue'方法,這使得它更容易。 – EpicPandaForce