我有两个名为 PreviousWorkout
的核心数据实体, 和 ExerciseData
. PreviousWorkout
实体拥有以下属性:date
, workoutName
, 和 exercises
. exercises
应该是 ExerciseData
的数组.在使用 Editor > Create NSManagedObject Subclass 创建类之后,我对 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]
的数组?
提前致谢
最佳答案
一个实体本质上是一个表,因此您可以在其中存储许多锻炼并创建一个锻炼实体,而不仅仅是一个 PreviousWorkout 实体。那么你应该有一个 Exercise 实体并在其中存储许多练习。然后为了在 Core Data 中存储一个“数组”,您在两个实体之间建立关系(可能是多对多关系,因为每个锻炼可以有很多练习,每个锻炼可以是许多锻炼的一部分)。然后,要将练习添加到锻炼对象,只需将它们附加到锻炼对象的 exercises
属性,该属性是一个 NSSet
,它指向锻炼对象。
现在您有许多锻炼对象和锻炼对象,您可以通过使用获取请求并按日期或您想要排序的任何属性对所有锻炼进行排序并获取获取请求的第一个结果来获取以前的锻炼.
你像这样创建一个新练习:
let exerciseData = NSEntityDescription.insertNewObjectForEntityForName("Exercise", inManagedObjectContext: managedObjectContext!) as Exercise
关于ios - 您将如何为 CoreData 建模以在 Swift 中保存自定义对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28754641/