如何建模CoreData以在Swift中保存一组自定义对象



我有两个核心数据实体,分别称为PreviousWorkoutExerciseDataPreviousWorkout实体具有以下属性:dateworkoutNameexercises。假设CCD_ 7是CCD_。在用编辑器>创建NSManagedObject子类创建类之后,我对ExerciseData实体做了同样的事情。

我不确定这是否是使用核心数据存储数据的正确方式。我的目标是拥有一个包含ExerciseDatadateworkoutName的数组的PreviousWorkout

我在代码中创建它的方式是创建一个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]的数组?

提前感谢

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

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

你创建了一个这样的新练习:

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

最新更新