您将如何为 CoreData 建模以在 Swift 中保存自定义对象数组?
How would you model CoreData to hold an array of custom objects in Swift?
我有两个名为 PreviousWorkout
和 ExerciseData
的核心数据实体。 PreviousWorkout
实体拥有以下属性:date
、workoutName
和 exercises
。 exercises
应该是 ExerciseData
的数组。在使用 Editor > Create NSManagedObject Subclass 创建 class 之后,我对 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
对象之前为其属性设置值。
这是创建包含数组的核心数据对象的正确方法吗?如何创建 [ExerciseData]
?
的数组
提前致谢
一个实体本质上是一个 table,因此您可以在其中存储许多锻炼并创建一个锻炼实体,而不仅仅是一个 PreviousWorkout 实体。那么你应该有一个 Exercise 实体并在其中存储许多练习。然后在 Core Data 中存储一个 "array",你在两个实体之间建立关系(可能是多对多的关系,因为每个锻炼可以有很多锻炼,每个锻炼可以是许多锻炼的一部分)。然后要将练习添加到锻炼对象,只需将它们附加到锻炼对象 exercises
属性 这是一个 NSSet
并指向锻炼对象。
所以现在您有许多锻炼对象和锻炼对象,您可以通过使用获取请求并按日期或任何 属性 您想要排序的方式对所有锻炼进行排序来获取以前的锻炼提取请求的第一个结果。
你像这样创建一个新练习:
let exerciseData = NSEntityDescription.insertNewObjectForEntityForName("Exercise", inManagedObjectContext: managedObjectContext!) as Exercise
我有两个名为 PreviousWorkout
和 ExerciseData
的核心数据实体。 PreviousWorkout
实体拥有以下属性:date
、workoutName
和 exercises
。 exercises
应该是 ExerciseData
的数组。在使用 Editor > Create NSManagedObject Subclass 创建 class 之后,我对 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
对象之前为其属性设置值。
这是创建包含数组的核心数据对象的正确方法吗?如何创建 [ExerciseData]
?
提前致谢
一个实体本质上是一个 table,因此您可以在其中存储许多锻炼并创建一个锻炼实体,而不仅仅是一个 PreviousWorkout 实体。那么你应该有一个 Exercise 实体并在其中存储许多练习。然后在 Core Data 中存储一个 "array",你在两个实体之间建立关系(可能是多对多的关系,因为每个锻炼可以有很多锻炼,每个锻炼可以是许多锻炼的一部分)。然后要将练习添加到锻炼对象,只需将它们附加到锻炼对象 exercises
属性 这是一个 NSSet
并指向锻炼对象。
所以现在您有许多锻炼对象和锻炼对象,您可以通过使用获取请求并按日期或任何 属性 您想要排序的方式对所有锻炼进行排序来获取以前的锻炼提取请求的第一个结果。
你像这样创建一个新练习:
let exerciseData = NSEntityDescription.insertNewObjectForEntityForName("Exercise", inManagedObjectContext: managedObjectContext!) as Exercise