我是 Core Data 的一名 nwebie,我设计了一个基于导航的应用程序,我使用的一些数据是在运行时创建的(来自通过 JSON 的 URL)。我学习了一些教程并搜索了将近一天,但仍然没有意识到如何将传入的 JSON 数据保存到我的核心数据模型中的实体(或事件?)。我在 DetailViewController
类中获取数据,我需要将此数据保存到 Core Data(我已经准备了一个具有 7 个属性的实体)。任何人都可以帮忙吗?(如果你知道一个好的教程或示例代码,我会很高兴)
编辑 这可能有点具体,但我确实遇到了麻烦,只需要一点帮助。
我的数据来自一种 Restful 服务器(我用 PHP 编写),首先用户输入他/她的登录信息(我之前已将其保存到服务器上的数据库中),当响应数据到来时,我将使用不同的它的元素在不同的 View 中(例如 user_id
将用于一个 View ,而 buttonData
等用于其他 View )。我的问题是,我将如何将 JSON 数据保存到我的核心数据模型中(目前有树实体)。提前致谢
注意:我四处寻找,但找不到任何关于像我这样的应用程序的答案和教程
最佳答案
最好的方法是创建对应于 JSON 结构的实体。最简单的是每个 JSON 对象成为一个实体,而数组成为实体数组。但是,要保持合理,不要对本质上属于其超对象一部分的 JSON 子对象引入过多矫枉过正。
创建实体后,您可以开始进行解析和翻译。使用一些 JSON 框架(从 iOS5 开始有一个来自 Apple 的框架)并将 JSON 字符串解析为对象树,其中根项是 NSArray 或 NSDictionary,子元素将是 NSArray、NSDictionary、NSNumber、NSString 或 NSNull。
在迭代循环中一一检查它们,并根据值分配给您的核心数据实体属性。您可以在此处使用 NSKeyValueCoding 并避免过多手动映射属性名称。如果您的 JSON 属性与实体属性同名,您将能够遍历所有字典元素并将它们解析为同名属性。
例子
我在类似情况下的解析代码如下:
NSDictionary *parsedFeed = /* your way to get a dictionary */;
for (NSString *key in parsedFeed) {
id value = [parsedFeed objectForKey:key];
// Don't assign NSNull, it will break assignments to NSString, etc.
if (value && [value isKindOfClass:[NSNull class]])
value = nil;
@try {
[yourCreatedEntity setValue:value forKey:property];
} @catch (NSException *exception) {
// Exception means such attribute is not defined in the class or some other error.
}
}
此代码适用于简单的情况,但是,它可能需要根据您的需要进行扩展:
- 使用某些类型的自定义映射,以防您希望将 JSON 值放置在不同命名的属性中。
- 如果您的 JSON 有子对象或子对象数组,您将需要检测这些情况,例如在 setter 中,并启动更深一层的新解析。否则,在我的示例中,您将面临将 NSDictionary 对象分配给 NSManagedObject 的情况。
我认为在这个答案的范围内深入研究这些更高级的问题是不合理的,因为它会扩展太多。
关于objective-c - 如何将 JSON 对象保存到 Core Data?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9369079/