如何使用 NSManagedObject 将 NSDictionary 保存到 CoreData?

Posted

技术标签:

【中文标题】如何使用 NSManagedObject 将 NSDictionary 保存到 CoreData?【英文标题】:How to save NSDictionary to CoreData using NSManagedObject? 【发布时间】:2015-10-20 06:38:46 【问题描述】:

我有一个巨大的 NSDictionary,具有三个层次结构。

它看起来如下层次结构

    主 JSON 包含一个对象

    它在根上的值很少,就像一个数组,它有字典,而那个字典也有一个字典。

    
    
     "id" = "123",
    "name" = "Hello",
    "title_image" = "URL"
    
     "sub_array" : [
       
        "id" = "123",
        "name" = "Hello",
        "title_image" = "URL"
         "another_dictionary":
           "abc":
    
            ,
            "abcd":
    
             
          
       ,
       
        "id" = "123",
        "name" = "Hello",
        "title_image" = "URL"
          "another_dictionary":
           "abc":
    
            ,
            "abcd":
    
             
          
        
     ]
    
     
    

现在我很困惑,我是应该制作单独的 NSManagedObject,还是制作一个 NSManagedObject 并与其他表或任何其他方法建立一些关系。

当我有巨大的 NSDictionary(来自服务器的 JSON,已转换为 NSDictionary)并且我想将其保存在 Core Data 中时,谁能告诉我该怎么做。

谢谢。

【问题讨论】:

你的应用有离线支持吗? 是的,它是离线支持。很高兴在这里见到你 leena,Nitin 和堆栈聊天室的其他人怎么样? :) @Leena 看看RestKit,它与离线支持和核心数据一起工作 我在一个项目中做同样的事情,其中​​来自服务器的 JSON 响应始终具有键“代码”、“消息”和“数据”。 JSON 中关键“数据”的对象是一个字典,它包含我需要的所有内容。我还使用核心数据以 ios 可用格式保存 JSON 响应。我的建议是在字典中为subArraysdictionaries 创建单独的NSManagedObjects,并使用关系来存储这些对象。 @Leena,没有,但我没有检查 RestKit。让我浏览一下。l 【参考方案1】:

解决方案:

id delegate_info = [UIApplication sharedApplication].delegate;
NSManagedObjectContext *context_info = [delegate_info managedObjectContext];
NSManagedObject *ManagedObject_info = [NSEntityDescription
                                               insertNewObjectForEntityForName:@“localDBname” inManagedObjectContext:context_info];

[ManagedObject_info setValue:[[yourDictName valueForKey:@“key1”] valueForKey:@"user_email"] forKey:@“localdbkey1”];
[ManagedObject_info setValue:[yourDictName valueForKey:@“key2”] forKey:@"localdbkey2”];
[ManagedObject_info setValue:[yourDictName valueForKey:@“key3”] forKey:@"localdbkey3”];


NSError *error;
[context_info save:&error];

注意:如果一个值是一个数组或字典,它在运行时将不起作用并崩溃。因为您将本地 db 键定义为 nsstring。

【讨论】:

上面的代码是一个将字典保存到核心数据中的示例。但是,如果您想将整个 json 保存为字典,则将您的核心数据属性定义为可转换的。它对我有用。我在将数组或字典保存到核心数据时遇到了同样的问题。

以上是关于如何使用 NSManagedObject 将 NSDictionary 保存到 CoreData?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NSManagedObject 将 NSDictionary 保存到 CoreData?

核心数据 NSManagedObject 到 JSON 编码不起作用

如何将 NSManagedObject 的 NSKeyedUnarchive 子类导入核心数据?

更新到 NSManagedObject 会导致 NSFetchedResultsController 删除

如何使用 RKValueTransformer 将 NSString 转换为 Core Data NSManagedObject

NSManagedObject 上的 Swift 扩展以返回实例类型 [重复]