将核心数据与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(具体请参阅实施查找或创建高效)。
整体的想法很简单。有两个对象(从核心数据中检索的对象和从服务中检索的对象)数组(有apiID
和id
或id
)。
很明显,如果有很多数据,我真的建议在后台执行操作。请记住,每个线程都需要依赖其NSManagedObjectContext
。否则,请利用iOS 5 API提供的新队列机制。
为了完整起见,我还建议阅读RayWenderlich教程How To Synchronize Core Data with a Web Service第1部分和第2部分。这非常有趣。
希望有所帮助。
感谢您的答复,尤其是有效导入数据链接。这是一个好的。 – squarefrog
@squarefrog不客气。如果你想要Upvote;)新年快乐。干杯。 –