【问题标题】:Insert JSON array into the Core Data entities将 JSON 数组插入核心数据实体
【发布时间】:2017-05-22 17:16:45
【问题描述】:

我有一个由 REST API 返回到我正在尝试修复的现有应用程序的 JSON。我对目标 C 相当陌生。

[
{
"Activities":"
         [
           {
             "activityid":845,
             "activityname":"Registration and networking breakfast",
             "actvitydesc":"Registration and networking breakfast",

           },
           {
             "activityid":846,
             "activityname":"Plenary session: The Workforce Tsunami",
             "actvitydesc":"It's Time to Rethink Talent 

           }
}
]

我的应用中有一个核心数据实体Activity,它包含以下属性 Activityidactivitynameactivitydesc

如何在我的核心数据实体中插入 JSON 数据?是否需要创建模型类来做到这一点?我可以将我的 json 数据直接插入核心数据而不创建模型对象吗?

【问题讨论】:

  • 问题解决了吗?
  • 您提供的代码必须稍作更改,但它确实有效。谢谢

标签: ios objective-c json core-data model


【解决方案1】:

如果您已经拥有名为 Activity 的实体,则可以使用 NSManagedObject 类来设置 Attribute 的值。试试这个

NSManagedObject *managedObject = [NSEntityDescription insertNewObjectForEntityForName:@"Activity" inManagedObjectContext:_managedObjectContext];

[managedObject setValue:[NSNumber numberWithInteger:4711] forKey:@"activityid"];

等等…… 您也可以通过 XCode 8 中 CoreData 的 Classgenerator 创建类,有多种方法。默认情况下,该类是自 XCode 8 以来自动生成的。如果您不喜欢这样,您可以禁用它并手动生成该类。只需转到 CoreData 模型 --> 编辑器 --> 创建 NSManagedObject 子类。请注意,您必须先停用自动代码生成。如果你不这样做,你将在构建项目时出错。 如果 JSON 属性的名称与 CoreData 属性的名称相同,您还可以像这样遍历 Dictionary:

NSArray *wrapper = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:nil];
for(NSDictionary *dict in wrapper){
    NSArray *activities = [dict objectForKey:@"Activities"];
    for(NSDictionary *activity in activities){
        NSManagedObject *managedObject = [NSEntityDescription insertNewObjectForEntityForName:@"Activity" inManagedObjectContext:_managedObjectContext];

       // [managedObject setValue:[NSNumber numberWithInteger:4711] forKey:@"activityid"];
        for(NSString *attributeName in activity)
            [managedObject setValue:[activity objectForKey:attributeName] forKey:attributeName];

    }
}

希望对你有帮助...

【讨论】:

  • 但问题是如何将活动数组存储在 Activity 实体中。?我怎么做?我可以这样做吗?
  • 问题是为什么要将该数组存储在活动实体中?我向您展示的方式为您在活动表中创建了一个新条目。因此 jsonarray 中的每一个条目都成为核心数据活动表中的一个自己的条目。如果要将数组存储在核心数据实体中,则必须选择可转换作为核心数据属性的属性类型。但我认为这不是你想要的。
  • 我的回答对您有帮助吗?
【解决方案2】:

要将任何内容插入核心数据,您需要生成模型。创建核心数据模型编辑器(如果您没有)并添加实体。网上有很多教程如何做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-12
    • 2015-07-20
    • 2012-02-02
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多