您将如何为 CoreData 建模以在 Swift 中保存自定义对象数组?

How would you model CoreData to hold an array of custom objects in Swift?

我有两个名为 PreviousWorkoutExerciseData 的核心数据实体。 PreviousWorkout 实体拥有以下属性:dateworkoutNameexercisesexercises 应该是 ExerciseData 的数组。在使用 Editor > Create NSManagedObject Subclass 创建 class 之后,我对 ExerciseData 实体做了同样的事情。

我不确定这是否是使用 Core Data 存储数据的正确方法。我的目标是拥有一个 PreviousWorkout,其中包含 ExerciseData 以及 dateworkoutName.

的数组

我在代码中创建它的方式是创建一个 managedbjectContext 具有:

let managedObjectContext = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext

然后我创建一个 PreviousWorkout 数组:

let newItem = NSEntityDescription.insertNewObjectForEntityForName("PreviousWorkout", inManagedObjectContext: managedObjectContext!) as PreviousWorkout

我将我所有的东西(dateworkoutName)添加到 newItem,然后我尝试创建一个 ExerciseData 数组:

var exerciseData = NSEntityDescription.insertNewObjectForEntityForName("ExerciseData", inManagedObjectContext: managedObjectContext!) as [ExerciseData]

此时程序崩溃。我意识到最后一行是非常错误的,但我不确定如何创建 ExerciseData 的数组。创建数组后,我想附加到它,然后在设置 newItem.exercises 等于 ExerciseData 对象之前为其属性设置值。

这是创建包含数组的核心数据对象的正确方法吗?如何创建 [ExerciseData]?

的数组

提前致谢

一个实体本质上是一个 table,因此您可以在其中存储许多锻炼并创建一个锻炼实体,而不仅仅是一个 PreviousWorkout 实体。那么你应该有一个 Exercise 实体并在其中存储许多练习。然后在 Core Data 中存储一个 "array",你在两个实体之间建立关系(可能是多对多的关系,因为每个锻炼可以有很多锻炼,每个锻炼可以是许多锻炼的一部分)。然后要将练习添加到锻炼对象,只需将它们附加到锻炼对象 exercises 属性 这是一个 NSSet 并指向锻炼对象。

所以现在您有许多锻炼对象和锻炼对象,您可以通过使用获取请求并按日期或任何 属性 您想要排序的方式对所有锻炼进行排序来获取以前的锻炼提取请求的第一个结果。

你像这样创建一个新练习:

let exerciseData = NSEntityDescription.insertNewObjectForEntityForName("Exercise", inManagedObjectContext: managedObjectContext!) as Exercise