我从Rest API请求数据,然后用核心数据将它们保存到数据库中。
第一个API结果
一个

C类
第二个API结果
一个
C类
我们应该删除“B”,因为从API结果中消失了。目前,在添加新数据之前,我们会删除表中的所有数据,但这看起来不对。
我的问题是如何用最少的CPU开销检测删除的数据并将它们删除到数据库中?
我可以选择核心数据存储类型(内存和sqlite),但不能使用NSBashRequest

最佳答案

当我不得不这样做的时候,我通过提取所有不在新的传入数据集中的内容,并删除提取结果中的所有内容来做到这一点。只有当您具有某种类型的唯一ID时,这才起作用——如果您的ABC是不具有重复项的唯一ID。
代码应该是
首先获取新传入数据中找到的所有唯一ID。如果传入的对象位于名为restResults的数组中,则如下所示

NSArray *incomingUniqueIDs = [restResults valueForKey:@"uniqueID"];

使用一个谓词执行一个fetch请求,该谓词查找所有具有唯一ID但不在新列表中的内容。有点像
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"uniqueID not in %@", incomingUniqueIDs];

然后执行提取并删除找到的所有内容。在您的情况下,第二次,incomingUniqueIDs将包含AC。谓词将只获取B。你删除了那个条目,就完成了。

10-06 13:55
查看更多