如何使用 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 响应。我的建议是在字典中为subArrays
和dictionaries
创建单独的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