swift - 核心数据插入具有多个关系的一对多

标签 swift core-data

enter image description here 下午好!

我正在使用核心日期来保存以下实体。

培训计划 > 事件 > 系列

在程序中保存事件时,我正在使用该方法。

let programTranningDB = NSEntityDescription.insertNewObject(forEntityName: "ProgramTranningDB", into: self.getContext())
(programTranningDB as! ProgramTranningDB).addToActivities(activities)
do{
            try self.getContext().save()
        } catch {
            print(error)
        }

如何将系列添加到事件中? 有人可以帮助我吗?

最佳答案

假设您的模型看起来有点像这样:

enter image description here

  • 培训计划可以包含许多事件。
  • 一项事件可以有许多个系列。

您将系列的实例添加到事件,其方式与将事件添加到培训计划<的方式相同/强>。

您可以在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/

相关文章:

Swift 4 发布配置错误

ios - Collection View 中不同部分的不同布局

objective-c - MP4作为外部数据引用存储在CoreData中...如何获取路径?

ios - swift ,Xcode 6 测试版 4 : How do I retrieve the file path of an image file that is currently being displayed using the Photos framework's assets?

ios - 快速滚动时在 UITableView 单元格中异步加载了错误的图片

ios - 自定义 tabBar 的边框渐变

swift - 如何使用for循环根据数组的值设置按钮图像?

ios - 核心数据后台处理仍然阻塞UI

iphone - 是否对Core Data中的所有实体进行批量更新操作?

cocoa - 使用绑定(bind)/核心数据时为 "[something copyWithZone:]: unrecognized selector sent to instance"