如何在核心数据中存储自定义对象的数组?

时间:2018-10-13 06:24:49

标签: arrays swift core-data

核心数据对我来说仍然有点新,所以我不太了解它的来龙去脉。我了解如何在核心数据中保存字符串,整数等基础知识,但是我不太了解如何将自定义对象数组保存到核心数据中,或者甚至可以做到。从我的研究中,我目前的理解是,我需要将属性设置为Binary Data,并将其标识符设置为[exercise](制作适应性应用程序)。不幸的是,当我尝试将数组传递到托管上下文中时,我的代码出现错误,提示“无法将类型'[Exercise]'的值赋给'数据类型'?”

func save (completion: (_ finished: Bool) -> ()){
    guard let managedContext = appDelegate?.persistentContainer.viewContext else { return }
    let workout = Workout(context: managedContext)

    workout.nameOfWorkout = workoutNameField.text
    workout.exercises = exercises // error appears on this line, both "exercises" are arrays


}

我想我的问题是,我试图做的可能吗?如果是这样,我缺少什么步骤?我在某处阅读过将数组转换为NSData的信息,并在需要访问它时将其改回了,但我担心的是,当我尝试将其改回时,它将无法按计划进行。很抱歉,这个冗长的问题,只想确保我将所有我能想到的细节都包括在内。

1 个答案:

答案 0 :(得分:0)

要在CoreData中存储自定义类型,最快的方法是:

  1. 制作Exercise的自定义类型(NSObject)子类
  2. 将核心数据模型中的属性类型设置为Transformable
  3. CustomClass设置为[Exercise]

因此,您必须定义Exercise类,类似于:

public class Exercise: NSObject {
  let name: String
  let duration: TimeInterval

  init(name: String, duration: TimeInterval) {
    self.name = name
    self.duration = duration
  }
}

然后转到模型定义并设置属性类型和CustomClass字段:

CoreData Model Example

您现在可以将保存功能用作:

func save (completion: (_ finished: Bool) -> ()){
  guard let managedContext = appDelegate?.persistentContainer.viewContext else { return }
  let workout = Workout(context: managedContext)

  workout.nameOfWorkout = workoutNameField.text
  workout.exercises = exercises

}