核心数据对我来说仍然有点新,所以我不太了解它的来龙去脉。我了解如何在核心数据中保存字符串,整数等基础知识,但是我不太了解如何将自定义对象数组保存到核心数据中,或者甚至可以做到。从我的研究中,我目前的理解是,我需要将属性设置为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的信息,并在需要访问它时将其改回了,但我担心的是,当我尝试将其改回时,它将无法按计划进行。很抱歉,这个冗长的问题,只想确保我将所有我能想到的细节都包括在内。
答案 0 :(得分:0)
要在CoreData中存储自定义类型,最快的方法是:
Exercise
的自定义类型(NSObject
)子类Transformable
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
字段:
您现在可以将保存功能用作:
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
}