在 CoreData 中存储和获取字典数组

Posted

技术标签:

【中文标题】在 CoreData 中存储和获取字典数组【英文标题】:store and fetch Array of Dictionary in CoreData 【发布时间】:2015-11-18 05:39:47 【问题描述】:

我正在使用 swift 处理 CoreData,在我的项目中,我想在 CoreData 中存储/获取字典。我的字典包含类别详细信息以及子类别详细信息(以字典数组形式)。我已经为类别详细信息建模,但我不知道如何存储特定类别的子类别详细信息。

我应该为子类别采用单独的模型吗?

所以请帮我做这件事。

我的字典看起来像:


    "category": [
    
      "id": "1",
      "category_name": "Water",
      "sub_category_count": "3",
      "sub_category": [
       
          "sub_categoryid": "1",
          "sub_categoryname": "Water1"
       ,
       
          "sub_categoryid": "2" ,
          "sub_categoryname": "Water2"
       ,
       
          "sub_categoryid": "3" ,
          "sub_categoryname": "Water3"
       
      ]
    ,
    
      "id": "2",
      "category_name": "Health",
      "sub_category_count": "3",
      "sub_category": [
      
         "sub_categoryid": "1" ,
         "sub_categoryname": "Health1"
      ,
      
         "sub_categoryid": "2" ,
         "sub_categoryname": "Health2"
      ,
      
        "sub_categoryid": "3" ,
        "sub_categoryname": "Health3"
      
     ]
   
]

【问题讨论】:

【参考方案1】:

您应该为子类别创建单独的实体,并为子类别添加一对多关系。

托管对象模型如下所示

然后转到编辑器 > 创建 NSManagedObject 子类。 您将获得 4 个文件

SubCategory.swift
SubCategory+CoreDataProperties.swift
Category.swift
Category+CoreDataProperties.swift

Category.swift中添加如下方法

func addSubcategoryObject(sub: SubCategory) 
    sub.category = self

然后像下面这样解析你的数据

data = your data.....
let json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) as! NSDictionary
if let categories = json["category"] as? [NSDictionary] 
    for category in categories 
        let categoryObject = NSEntityDescription.insertNewObjectForEntityForName("Category", inManagedObjectContext: self.managedObjectContext) as! Category
        categoryObject.category_name = category["category_name"] as? String
        categoryObject.id = NSNumber(integer: Int((category["id"] as? String)!)!)
        categoryObject.sub_category_count = NSNumber(integer: Int((category["sub_category_count"] as? String)!)!)

        if let subcateories = category["sub_category"] as? [NSDictionary] 
            for subCategory in subcateories 
                let subCategoryObject = NSEntityDescription.insertNewObjectForEntityForName("SubCategory", inManagedObjectContext: self.managedObjectContext) as! SubCategory
                subCategoryObject.sub_categoryname = subCategory["sub_categoryname"] as? String
                subCategoryObject.sub_categoryid = NSNumber(integer: Int((subCategory["sub_categoryid"] as? String)!)!)
                categoryObject.addSubcategoryObject(subCategoryObject)
            
        
    

编辑

你应该在SubcategoryCategory中添加一个反比关系category

【讨论】:

但是我应该如何存储这个子类别数据? 您的 Category 模型中有一个 SubCategory 数组,因此您必须为字典中的每个子类别创建一个 SubCategory 对象 你的意思是说我应该在 Model 类别中获取 SubCategory 对象的数组 bot 数组,您可以简单地在模型中添加关系。然后为这些实体创建托管对象。那你就可以理解使用了 你可以在这里参考关系教程raywenderlich.com/14742/…它在Objective C中。稍后会更新我的答案

以上是关于在 CoreData 中存储和获取字典数组的主要内容,如果未能解决你的问题,请参考以下文章

保存 Core Data 数组和字典

Swift:在 Core Data 中存储自定义类的数组

将 NSNumber* 的 NSArray 存储为 Core Data 中的 NSString

iOS 开发:我可以在 Core Data 对象中存储整数数组而不创建新表来表示数组吗?

如何将 NSMutable 数组中的数据存储在 Core Data 中?

使用 Core Data 时是不是需要本地数组?