对于一些概念上的阅读,您可能需要阅读文件关于Efficiently Importing Data,尤其是“查找,或创建”。 See a previous similar question.
获取JSON并将其保存为本地Core Data是非常合理的。它是如何我做的是在两个阶段:
- 转换JSON天然可可数据类型(的NSDictionary和NSArray的)
- 转换NS *为核心数据对象
两个很好的框架,以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和核心数据模型的属性名相同,并且该数据类型匹配(即JSON数字是核心数据NSNumbers等)。即使模型改变,上面的代码也能很好地工作。
上述代码不考虑如何测试对象是否已经存在于本地,但您可以想象如何添加该对象。您的模型中必须具有某种形式的对象ID,并且您可以在添加它之前查看该对象是否存在于本地,或者是否需要更新现有对象。