objective-c - 如何将 JSON 对象保存到 Core Data?

标签 objective-c core-data ios5 nsfetchrequest

我是 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/

相关文章:

objective-c - 使用 RestKit/iOS 映射嵌套数组

objective-c - 未在drawRect方法中设置属性 - iOS

ios - 如何清理ios app tmp文件夹

swift - 获取单个 Transformable 属性的请求 (Swift)

objective-c - 如何在 UITextfield 中输入时和输入后放置货币符号?

iphone - 在 iPhone 模拟器的用户目录中找不到 db 文件

ios - 使用核心数据谓词进行身份验证后获取用户名

ios - plist 漏洞的类加载

ios - 具有 bool 属性的 CoreData 实体被保存为 NSNumber 对象

ios - 在第一个 IOS 项目 Xcode 4 中获取信号 SIGABRT