将Core Data与JSON API同步的最有效方法是什么?

将我的核心数据模式与提供JSON的远程API同步的最佳方式是什么? 目前,我正在循环查看核心数据的JSON响应中的每个字典,以查看API ID是否存在。

这很好,但是现在要做的就是删除所有不在服务器上的本地对象。 这是我的JSON数据的一个例子:

[ { "id":1234, "name":"My first object", "description":"This is a long string with lots of information" }, { "id":1235, "name":"My second object", "description":"This is a long string with lots of information" } ] 

目前我能想到完成这个的唯一方法就像下面这样:

 NSArray *jsonData = // Convert json data to array using NSJSONSerialization NSInteger fetchedCount = _fetchedResultsController.fetchedObjects.count; if (fetchedCount != jsonData.count) { for (int i = 0; i < fetchedCount; i++) { NSManagedObject *object = [_fetchedResultsController objectAtIndexPath: [NSIndexPath indexPathForItem:i inSection:0]]; NSNumber *idNumber = object.apiID; BOOL shouldDelete = YES; for (NSDictionary *jsonDict in jsonData) { if ([jsonDict objectForKey:@"id"] == idNumber) { shouldDelete = NO; } } if (shouldDelete) { // Delete object. } } } 

如果JSON数组包含很多对象,我认为这将是巨大的低效率。

这可能是好的,但我认为你应该应用苹果文档中build议的查找或创build模式。 请参阅此处以获取深入的解释高效导入数据 (特别参见实施“高效查找或创build” )。

总体思路很简单。 有两个对象数组(从核心数据检索一个和你从服务中检索)对象sorting(由apiIDid resp。)。

显然,如果有很多数据,我真的build议在后台执行操作。 请记住,每个线程都需要依赖其NSManagedObjectContext 。 否则,请利用iOS 5 API提供的新队列机制。

为了完整起见,我还build议阅读RayWenderlich教程如何使Web服务第1部分和第2部分同步核心数据 。这非常有趣。

希望有所帮助。