首页 > 解决方案 > 使用 CoreData 保存包含字典的数组

问题描述

我第一次尝试在 iOS 应用程序中使用 CoreData 框架,但遇到了一些麻烦。

我有一种复杂类型的数组,其中包含包含字典的元组:

let DataSet: [( Float, Float, [String : String])] = ...

我创建了一个NSManagedObjectContext和一个NSManagedObject,我将DataSet数组添加到了NSManagedObject,但是当我尝试保存第一个NSManagedObjectContext时,应用程序崩溃了。

使用普通数组不会发生这种情况,而只有像上面那样更复杂的数组才会发生这种情况。

有没有办法解决这个问题?我需要调整我的 xcdatamodel 吗?

我将不胜感激。

标签: iosswiftxcodecore-data

解决方案


  1. 首先,您需要声明 2 个单独的实体。一个用于浮点数,另一个用于字典。
  2. 然后在 Float 实体和 Dictionary 之间创建“一对多”关系。它看起来像这样,

    xcdatamodeld 截图

  3. 然后你需要将你的元组转换成这两个实体,像这样,

    dataSet.forEach{ (member) in
        let tuple = Test.(context: mainContext)
        tuple.first = member.0
        tuple.second = member.1
    
        let dictionary = member.2
        dictionary.forEach{ (key, value) in
            let dick = Dick.(context: mainContext)
            dick.key = key
            dick.value = value
            tuple.addToContains(dick)
        }
    }
    
  4. 最后,您需要保存这些值。

    if mainContext.hasChanges {
        do {
            try mainContext.save()
        } catch {
            print(\(error))
        }
    }
    

推荐阅读