核心数据:从Rest API同步数据

时间:2018-12-24 13:58:52

标签: ios objective-c swift database core-data

我要从Rest API请求数据,然后将其与核心数据一起保存到数据库中。

  

第一个API结果

     
      
  1. A
  2.   
  3. B
  4.   
  5. C
  6.   
     

第二个API结果

     
      
  1. A
  2.   
  3. C
  4.   

我们应删除“ B”,因为它已从API结果中消失了。目前,我们在添加新数据之前先删除表中的所有数据,但这看起来并不正确。

我的问题是如何在CPU开销最小的情况下检测已删除的数据并将其删除到数据库中?

我可以选择核心数据存储类型(内存 sqlite ),并且不能使用NSBashRequest

1 个答案:

答案 0 :(得分:0)

当我必须这样做时,我通过获取不在新的传入数据集中的所有内容并删除获取结果中的所有内容来做到这一点。仅当您具有某种唯一ID时,此方法才有效-如果您的ABC是没有重复的唯一ID。

代码类似于

  1. 首先获取在新传入数据中找到的所有唯一ID。如果传入的对象位于名为restResults的数组中,则类似于

    NSArray *incomingUniqueIDs = [restResults valueForKey:@"uniqueID"];
    
  2. 使用谓词执行获取请求,该谓词查找具有唯一ID(在新列表中不是)的所有内容。像

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"uniqueID not in %@", incomingUniqueIDs];
    

然后执行获取并删除找到的所有内容。对于您而言,第二次incomingUniqueIDs将包含AC。谓词将仅获取B。您将删除该条目,然后就可以完成。