你如何建模Core Data以在Swift中保存一组自定义对象?

时间:2015-02-26 23:13:57

标签: ios xcode swift core-data

我有两个名为PreviousWorkoutExerciseData的核心数据实体。 PreviousWorkout实体包含以下属性:dateworkoutNameexercisesexercises应该是ExerciseData的数组。使用Editor>制作课程后创建NSManagedObject子类,然后我对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对象之前设置其属性的值。

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

的数组

提前致谢

1 个答案:

答案 0 :(得分:1)

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

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

您可以像这样创建一个新练习:

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