arrays - 如何在核心数据中存储自定义对象数组?
问题描述
核心数据对我来说还是有点新鲜,所以我不太了解其中的来龙去脉。我了解如何在核心数据中保存字符串、整数等基础知识,但我不太了解如何将自定义对象数组保存到核心数据中,或者是否可能。根据我的研究,我目前的理解是我需要将属性设置为二进制数据,并将其标识符设置为 [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,并在需要访问时将其改回,但我担心的是,当我尝试将其改回时,它不会按计划工作。很抱歉这个冗长的问题,只是想确保我包含了我能想到的所有细节。
解决方案
对于在 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
}
推荐阅读
- javascript - 如何防止默认后退按钮 Apachhe Cordova?
- php - Laravel:为 Json 响应添加分页
- r - R中的data.table:从x创建变量到i
- javascript - 如何避免 IE 11 中缓存的 API 数据响应?
- xpath - Orbeon:从不同的重复网格访问重复的网格项
- c# - 一个编码问题:最小可能的对象组
- c# - 机器人在模拟器上工作,但在 Azure 上不工作(InternalServerError)
- time - PowerBI 中的时间表问题 - (用于堆积条形图)
- karma-jasmine - 错误:使用 karma.js 暂停潜在的内存不足崩溃
- dart - Flutter - 遍历对象键和值