将核心数据与JSON API同步的最有效方法

问题描述:

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

这很好,但现在要做的就是删除所有不在服务器上的本地对象。这里是我的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数组包含很多对象。

这可能是好的,但我认为你应该应用查找或创建模式在Apple文档中建议。请参阅此处以获得深入解释Efficiently Importing Data(具体请参阅实施查找或创建高效)。

整体的想法很简单。有两个对象(从核心数据中检索的对象和从服务中检索的对象)数组(有apiIDidid)。

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

为了完整起见,我还建议阅读RayWenderlich教程How To Synchronize Core Data with a Web Service第1部分和第2部分。这非常有趣。

希望有所帮助。

+0

感谢您的答复,尤其是有效导入数据链接。这是一个好的。 – squarefrog

+0

@squarefrog不客气。如果你想要Upvote;)新年快乐。干杯。 –