Swift 3 - 通过一对多关系保存核心数据

时间:2017-07-08 11:05:03

标签: ios swift core-data

我正在处理核心数据,我有两个实体:

游泳池 参数 每个游泳池可以有多个参数

relation between swimming pool and parameters

swimming pool entity

parameters entity

我已经保存并获取了游泳池的数据。

我已经通过表格保存了它们。

在我的AppDelegate中我有:

let ad = UIApplication.shared.delegate as! AppDelegate
let context = ad.persistentContainer.viewContext

以及这里的功能:

 var swimmingpool: SwimminPool!

    if swimmingPoolToEdit == nil {
        swimming = SwimminPool(context: context)
    } else {
        swimming = swimmingPoolToEdit
    }

    if let name =  swimmingName.text {
        swimming.name = name
    }
    if let volume = swimmingVolume.text {
        swimming.volume = volume
.........................................................
ad.saveContext()

我按照这样执行获取:

var controller: NSFetchedResultsController<SwimmingPool>!

func attemptFetch() {

    let fetchRequest: NSFetchRequest<SwimminPool> = SwimminPool.fetchRequest()
    let dataSort = NSSortDescriptor(key: "createdAt", ascending: false)

    fetchRequest.sortDescriptors = [dataSort]

     let controller = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)

    controller.delegate = self
    self.controller = controller

    do {
        try controller.performFetch()
    } catch {
        let error = error as NSError
        print("\(error.debugDescription)")
    }
}

通过segue我将所有数据传递给新控制器并通过新表格(在另一个控制器中)我试图保存参数的数据并将它们连接到特定的游泳池。 / p>

我是否需要保存数据,就像我为游泳池所做的那样,这种关系会自动连接这两个实体,还是我需要在保存后连接它们?

我是swift的新手,我不确定如何保存相关数据

保存时或者我将执行参数提取时进行连接?

谢谢!

2 个答案:

答案 0 :(得分:3)

创建参数托管对象,然后将此参数链接到 SwimingPool 托管对象:

let parameter = Parameters(context: context)
parameter.chlorum = Double(12245454.12211) // insert your value
parameter.oxigen = "your value here"
parameter.createdAt = "your value here"

let swimming = SwimminPool(context: context)
swimming.parameter = parameter
ad.saveContext()

答案 1 :(得分:1)

如果您要将Parameters添加到特定SwimmingPool

  • 在segue中将特定的SwimmingPool实例传递给表单控制器。
  • 通过将Parameters实例插入上下文来创建它们。
  • 通过调用SwimmingPool属性/关系上的insertparameter子类生成的访问者addToParameter,将关系添加到NSManagedObject实例。< / LI>
  • 保存上下文。 (重要的是最后步骤。)

注意:为避免混淆,Entity总是以单数形式命名(例如SwimmingPool / Parameter),也是单一形式的一对一关系(例如{{1}和复数形式的一对多关系(例如parameter

PS:你的问题含糊不清:你正在写每个游泳池可以有多个参数但模型设计是每个参数可以有多个游泳池