Bry*_*oso 9 iphone core-data iphone-sdk-3.0
我的应用程序上的所有数据都是通过JSON通过API提取的.这些数据中很大一部分的性质是它不会经常变化.因此,要制作JSON请求以获取不会发生太大变化的数据列表似乎并不那么吸引人.
我正在寻找最明智的选择,让这个JSON在某种持久性数据存储中保存到iPhone上.显然,当手机无法访问API时,保留数据的一个优点是提供它.
我看了一些 例如让JSON和CoreData进行交互的例子,但似乎他们只描述了将NSManagedObjects转换为JSON.如果我可以将JSON转换为CoreData,那么我唯一的问题就是能够在API中的数据发生变化时更改该数据.
(或者,也许这只是愚蠢的.)
Jaa*_*nus 15
对于某些概念性阅读,您可能希望阅读有关有效导入数据的文档,尤其是"查找或创建".查看以前的类似问题.
获取JSON并将其作为核心数据保存在本地是非常合理的.我是如何做到的分为两个阶段:
用于在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
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
以上假设您的JSON和Core Data模型中的属性名称相同且数据类型匹配(即JSON编号是Core Data NSNumbers等).即使模型发生变化,上面的代码也可以很好地工作.
上面的代码没有考虑如何测试对象是否已经存在于本地,但你可以想象如何添加它.您必须在模型中具有某种形式的对象ID,并且可以在添加对象之前查看该对象是否存在于本地,或者是否需要更新现有对象.
| 归档时间: |
|
| 查看次数: |
7514 次 |
| 最近记录: |