【问题标题】:How would you model CoreData to hold an array of custom objects in Swift?您将如何建模 CoreData 以在 Swift 中保存一组自定义对象?
【发布时间】:2015-02-26 23:13:57
【问题描述】:

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

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

提前致谢

【问题讨论】:

    标签: ios xcode swift core-data


    【解决方案1】:

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

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

    你像这样创建一个新的练习:

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

    【讨论】:

    • 谢谢!我创建新锻炼 (newItem) 的方法是否正确?
    • 是的,没错,但我建议将“PreviousWorkout”重命名为“Workout”
    • 好吧,我会这样做的。最后一件事,您提到exercises 属性是一个NSSet。我该如何设置呢?目前在数据模型中设置为Transformable
    • 它不应该是任何类型的。您必须在数据模型中建立关系。然后,当您重新生成 NSManagedObject 子类时,您将看到 NSSet 类型的关系属性
    猜你喜欢
    • 1970-01-01
    • 2015-12-02
    • 2020-04-26
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多