我正在使用核心日期来保存以下实体。
培训计划 > 事件 > 系列
在程序中保存事件时,我正在使用该方法。
let programTranningDB = NSEntityDescription.insertNewObject(forEntityName: "ProgramTranningDB", into: self.getContext())
(programTranningDB as! ProgramTranningDB).addToActivities(activities)
do{
try self.getContext().save()
} catch {
print(error)
}
如何将系列添加到事件中? 有人可以帮助我吗?
最佳答案
假设您的模型看起来有点像这样:
- 培训计划可以包含许多事件。
- 一项事件可以有许多个系列。
您将系列的实例添加到事件,其方式与将事件添加到培训计划<的方式相同/强>。
您可以在addToSeries(_:)
的Activity上使用自动生成的方法
我通常将所有数据域逻辑包含在一个类中,以帮助测试和关注点分离。
class DomainLogic {
var context: NSManagedObjectContext
init(context: NSManagedObjectContext) {
self.context = context
}
func addNewProgram(named: String) -> TrainingProgram {
guard let program = NSEntityDescription.insertNewObject(forEntityName: "TrainingProgram", into: context) as? TrainingProgram else {
preconditionFailure("TrainingProgram should be created here")
}
program.name = named
return program
}
func addNewActivityToProgram(_ program: TrainingProgram) -> Activity {
guard let activity = NSEntityDescription.insertNewObject(forEntityName: "Activity", into: context) as? Activity else {
preconditionFailure("Activity should be created here")
}
program.addToActivities(activity)
return activity
}
func addNewSeriesToActivity(activity: Activity) -> Series {
guard let series = NSEntityDescription.insertNewObject(forEntityName: "Series", into: context) as? Series else {
preconditionFailure("Series should be created here")
}
activity.addToSeries(series)
return series
}
}
这导致创建一个新的系列并将其添加到链中的简单序列。
var context: NSManagedObjectContext!
func createSeries() -> Series {
let logic = DomainLogic(context: context)
let program = logic.addNewProgram(named: "Fatima's Program")
let activity = logic.addNewActivityToProgram(program)
let series = logic.addNewSeriesToActivity(activity: activity)
return series
}
您还需要逻辑来从数据库恢复现有的TrainingProgram对象。
关于swift - 核心数据插入具有多个关系的一对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56942295/