ios - 使用 CoreData 保存包含字典的数组
问题描述
我第一次尝试在 iOS 应用程序中使用 CoreData 框架,但遇到了一些麻烦。
我有一种复杂类型的数组,其中包含包含字典的元组:
let DataSet: [( Float, Float, [String : String])] = ...
我创建了一个NSManagedObjectContext
和一个NSManagedObject
,我将DataSet
数组添加到了NSManagedObject
,但是当我尝试保存第一个NSManagedObjectContext
时,应用程序崩溃了。
使用普通数组不会发生这种情况,而只有像上面那样更复杂的数组才会发生这种情况。
有没有办法解决这个问题?我需要调整我的 xcdatamodel 吗?
我将不胜感激。
解决方案
- 首先,您需要声明 2 个单独的实体。一个用于浮点数,另一个用于字典。
然后在 Float 实体和 Dictionary 之间创建“一对多”关系。它看起来像这样,
然后你需要将你的元组转换成这两个实体,像这样,
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) } }
最后,您需要保存这些值。
if mainContext.hasChanges { do { try mainContext.save() } catch { print(\(error)) } }
推荐阅读
- python - 为什么在这个使用 for 循环的 Python 单行代码中语法无效?
- python - 在 Python 中的列表中搜索值
- gcc - cortex m - newlib-nano - 时间函数(HEAP USAGE)
- java - 无法从 Java 中的 Linux 机器连接到 Oracle 数据库
- netbeans - Netbeans 11 - 在 xdebug 中更改当前行的颜色
- jquery - jQuery手风琴将类应用于所有面板而不是一个
- .net - 无法加载文件或程序集“Microsoft.Practices.ObjectBuilder2”
- javascript - 事件监听超时 - node.js
- r - 标签中的 Factoshiny 错误:缺少参数,没有默认值
- bash - 使用通配符搜索替换 Sed