我有两个核心数据实体,分别称为PreviousWorkout
和ExerciseData
。PreviousWorkout
实体具有以下属性:date
、workoutName
和exercises
。假设CCD_ 7是CCD_。在用编辑器>创建NSManagedObject子类创建类之后,我对ExerciseData
实体做了同样的事情。
我不确定这是否是使用核心数据存储数据的正确方式。我的目标是拥有一个包含ExerciseData
、date
和workoutName
的数组的PreviousWorkout
。
我在代码中创建它的方式是创建一个managedbjectContext
,其中包含:
let managedObjectContext = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext
然后我用创建了一个PreviousWorkout
阵列
let newItem = NSEntityDescription.insertNewObjectForEntityForName("PreviousWorkout", inManagedObjectContext: managedObjectContext!) as PreviousWorkout
我将我所有的东西(date
和workoutName
)添加到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