我有两个名为PreviousWorkout
和ExerciseData
的核心数据实体。 PreviousWorkout
实体包含以下属性:date
,workoutName
和exercises
。 exercises
应该是ExerciseData
的数组。使用Editor>制作课程后创建NSManagedObject子类,然后我对ExerciseData
实体做了同样的事情。
我不确定这是否是使用Core Data存储数据的正确方法。我的目标是让PreviousWorkout
包含ExerciseData
以及date
和workoutName
的数组。
我在代码中创建代码的方法是创建一个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
对象之前设置其属性的值。
这是创建包含数组的Core Data对象的正确方法吗?如何创建[ExerciseData]
?
提前致谢
答案 0 :(得分:1)
实体本质上是一个表,因此您可以在其中存储许多Workouts并创建Workout实体,而不仅仅是PreviousWorkout实体。然后你应该有一个练习实体并在其中存储许多练习。然后在Core Data中存储一个“数组”,你在两个实体之间建立关系(可能是多对多关系,因为每个训练可以有很多练习,每个练习可以是许多训练的一部分)。然后,为了将锻炼添加到锻炼对象,您只需将它们附加到锻炼对象exercises
属性,该属性为NSSet
,并指向锻炼对象。
现在您有许多锻炼对象和锻炼对象,您可以使用获取请求获取之前的锻炼,并按日期或您要排序的任何属性对所有锻炼进行排序并获取获取请求的第一个结果
您可以像这样创建一个新练习:
let exerciseData = NSEntityDescription.insertNewObjectForEntityForName("Exercise", inManagedObjectContext: managedObjectContext!) as Exercise