对于一些概念性阅读,您可能需要阅读有关 Efficiently Importing Data 的文档,尤其是“查找或创建”。 See a previous similar question.
获取 JSON 并将其保存为本地核心数据是非常合理的。我的做法分为两个阶段:
- 将 JSON 转换为原生 Cocoa 数据类型(NSDictionary 和 NSArray)
- 将 NS* 转换为 Core Data 对象
在 JSON 和 NS* 之间转换的两个很好的框架是 json-framework 和 TouchJSON。下面的例子是基于 json-framework 的。
假设您从 JSON 中获取了一些对象的数组。然后你会这样做:
NSArray *objects = [jsonStringYouGotFromServer JSONValue];
for (NSDictionary *_object in objects) {
CDObjectType *cdObject = [self cdObjectFromDictionary:_object];
// cdObject is now a full-featured Core Data object
}
cdObjectFromDictionary 可能是这样的:
- (CDObjectType *) cdObjectFromDictionary:(NSDictionary *)dict {
CDObjectType *object = [NSEntityDescription
insertNewObjectForEntityForName:@"Object"
inManagedObjectContext:moc];
NSDictionary *attributes = [[NSEntityDescription
entityForName:@"Object"
inManagedObjectContext:moc] attributesByName];
for (NSString *attr in attributes) {
[object setValue:[dict valueForKey:attr] forKey:attr];
}
return object;
}
以上假设 JSON 和 Core Data 模型中的属性名称相同并且数据类型匹配(即 JSON 编号是 Core Data NSNumbers 等)。即使模型发生变化,上面的代码也能很好地工作。
上面的代码并没有考虑如何测试对象是否在本地已经存在,但是你可以想象如何添加它。您的模型中必须有某种形式的对象 ID,并且您可以在添加之前查看该对象是否在本地存在,或者是否需要更新现有对象。