使用CoreData保存包含字典的数组

时间:2019-09-09 14:23:30

标签: ios swift xcode core-data

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

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

TRUE

我创建了一个let DataSet: [( Float, Float, [String : String])] = ...和一个NSManagedObjectContext,我将NSManagedObject数组添加到了DataSet,但是当我尝试保存第一个NSManagedObject时,该应用程序崩溃了。

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

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

我将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

    xcdatamodeld screenshot

  3. 然后您需要将元组转换为这2个实体,

    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))
        }
    }