我从Rest API请求数据,然后用核心数据将它们保存到数据库中。
第一个API结果
一个
乙
C类
第二个API结果
一个
C类
我们应该删除“B”,因为从API结果中消失了。目前,在添加新数据之前,我们会删除表中的所有数据,但这看起来不对。
我的问题是如何用最少的CPU开销检测删除的数据并将它们删除到数据库中?
我可以选择核心数据存储类型(内存和sqlite),但不能使用NSBashRequest
最佳答案
当我不得不这样做的时候,我通过提取所有不在新的传入数据集中的内容,并删除提取结果中的所有内容来做到这一点。只有当您具有某种类型的唯一ID时,这才起作用——如果您的A
、B
和C
是不具有重复项的唯一ID。
代码应该是
首先获取新传入数据中找到的所有唯一ID。如果传入的对象位于名为restResults
的数组中,则如下所示
NSArray *incomingUniqueIDs = [restResults valueForKey:@"uniqueID"];
使用一个谓词执行一个fetch请求,该谓词查找所有具有唯一ID但不在新列表中的内容。有点像
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"uniqueID not in %@", incomingUniqueIDs];
然后执行提取并删除找到的所有内容。在您的情况下,第二次,
incomingUniqueIDs
将包含A
和C
。谓词将只获取B
。你删除了那个条目,就完成了。