gpt4 book ai didi

swift - 对象映射器 + Realm + Alamofire

转载 作者:行者123 更新时间:2023-11-30 10:03:05 25 4
gpt4 key购买 nike

我使用 ObjectMapper 映射我的对象,这些对象由 Alamofire 提供,并将它们保留在 Realm 中。

一切正常。但是,如何删除存在于 Realm 中但已在我的 Web 服务中删除的对象?

更新:根据下面的答案,我目前以以下代码结束:

 if let overviewItemsArray = response.result.value{

do{
try self.realm.write{
self.realm.delete(self.realm.objects(OverviewItem))
self.realm.add(overviewItemsArray, update: true)
}
}
catch let err as NSError {
logger.error("Error with realm: \(err.localizedDescription)")
}
overviewItemsAsList.removeAll()
overviewItemsAsList.appendContentsOf(self.realm.objects(OverviewItem)
.sorted("sortOrder", ascending: true))
successHandler(overviewItemsAsList)
}

也许有人进一步提出了如何改进这一点。我有 10 个这种类型的对象。但在其他对象上我得到了 1500 个项目。

最佳答案

我终于弄清楚了,而且效果很好。我计算缓存数据和新数据的差异并将其删除:

private func deleteOrphans(existingData: List<VotingHeader>, fetchedData:[VotingHeader]){

guard existingData.count>0 else {
return
}

let existingIDs = Set(existingData.map({$0.votingID}))
let incomingIDs = fetchedData.map({$0.votingID})
let idsToDelete = existingIDs.subtract(incomingIDs)

if idsToDelete.count>0{
let itemsToDelete = self.realm.objects(VotingHeader).filter("votingID IN %@",idsToDelete)

try! self.realm.write{
self.realm.delete(itemsToDelete)
}
}
}

关于swift - 对象映射器 + Realm + Alamofire,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37398228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com