gpt4 book ai didi

iphone - JSON 到持久数据存储(CoreData 等)

转载 作者:行者123 更新时间:2023-12-03 18:32:25 24 4
gpt4 key购买 nike

我的应用程序上的所有数据都是通过 JSON 通过 API 提取的。这些数据中很大一部分的本质是它不会经常改变。因此,发出 JSON 请求来获取变化不大的数据列表似乎没有那么吸引人。

我正在寻找最明智的选择,将此 JSON 保存到 iPhone 上的某种持久数据存储中。显然,保存数据的一个优点是在手机无法访问 API 时提供数据。

我看过a few examples例如,让 JSON 和 CoreData 交互,但它们似乎只描述了将 NSManagedObjects 转换为 JSON。如果我可以将 JSON 转换为 CoreData,那么我唯一的问题就是当 API 中的数据发生更改时能够更改该数据。

(或者,也许这只是愚蠢的。)

最佳答案

对于一些概念性阅读,您可能需要阅读有关 Efficiently Importing Data 的文档,尤其是“查找或创建”。 See a previous similar question.

获取 JSON 并将其保存为本地核心数据是非常合理的。我的做法分为两个阶段:

  1. 将 JSON 转换为原生 Cocoa 数据类型(NSDictionary 和 NSArray)
  2. 将 NS* 转换为 Core Data 对象

用于 JSON 和 NS* 之间转换的两个很好的框架是 json-frameworkTouchJSON 。以下示例基于 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,您可以在添加该对象之前查看该对象是否存在于本地,或者是否需要更新现有对象。

关于iphone - JSON 到持久数据存储(CoreData 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2563984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com