如何将多个值存储到 CoreData 中的一个属性中?

Posted

技术标签:

【中文标题】如何将多个值存储到 CoreData 中的一个属性中?【英文标题】:How do i store multiple values into one attribute in CoreData? 【发布时间】:2017-01-09 18:33:52 【问题描述】:

我正在设计一个健康和健身应用程序,并且正在设计一个运动数据库。我将所有练习从 JSON 格式转换,并将它们存储到与它们相关的肌肉群相关的多个数组中。我为每个肌肉群创建了多个实体,然后在每个实体中创建了一个名为“exercises”的属性。计划是将与肌肉群相关的练习存储到正确的实体中。我尝试使用 for 循环遍历数组并保存值。然而,它似乎只将每个数组中的一个值保存到一个属性中。

这是我将用来尝试保存到 CoreData 的数组示例...

let chestExercises = ["Bench Press", "Incline Press"]
let backExercises = ["Lat Pulldown", "Pullover"]

我使用 CoreData 执行此操作的原因是因为我希望我的用户能够编辑/删除数据库中的任何练习。

对于我正在采用的这种方法,我非常感谢任何帮助和建议。谢谢

【问题讨论】:

【参考方案1】:

您在那里有一对多的关系,因此您应该创建另一个名为“运动”的实体,并为 MuscleGroup 提供 1:M 的关系,假设您在多个组中没有任何运动。

实际上,你可以让肌肉群成为锻炼的一个属性。当你去选择一组练习时,只需给出一个过滤到所请求肌肉群的谓词。 MuscleGroup 然后可以是一个枚举,你存储一个整数,表示每个练习是枚举的哪个成员。

但正确的答案将取决于您想要持久存储的所有数据,例如是否有其他与 MuscleGroup 或运动相关的属性。

【讨论】:

嗯,我想在将来的某个时间为每个练习存储一个唯一的描述(字符串)和每个练习的图片(字符串)。感谢您的回复。 所以是的,你真的不需要肌肉群实体吗?它可以只是一个属性,让您可以通过执行 select 语句来过滤练习。【参考方案2】:

这就是我将数组保存到 CoreData 的方式。

var exerciseName: String = ""
let chestExercises = ["Bench Press", "Incline Press"] as NSArray
let chestString = chestExercises.componentsJoined(by: ",")
exerciseName = chestString

然后我在 CoreData 中将 exerciseName 设置为字符串。

【讨论】:

以上是关于如何将多个值存储到 CoreData 中的一个属性中?的主要内容,如果未能解决你的问题,请参考以下文章

将 UIColor 存储在 CoreData 中

在 CoreData 中存储排行榜分数?

仅获取共享特定属性值的 Core Data 对象

CoreData如何实现托管对象的“计算”属性字段

如何在 coredata 模型中搜索多个值?

如何使用 CoreData 控制用户输入