【问题标题】:Nill value when passing data beetween related entities in Core Data在 Core Data 中的相关实体之间传递数据时的空值
【发布时间】:2020-08-30 19:41:20
【问题描述】:

我现在尝试了几天(没有成功)在核心数据上保存实体(“Alumno”)的一些属性,然后在它的“子”视图控制器(“Especialidad”)上保存其相关值。

Mine 是一款音乐教学应用,就像联系人应用一样。我将选定的“Especialidad”(本例中的演奏乐器)保存到 Core Data 后,从其表格视图中传递相应的“segue”

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    especialidadSeleccionada = especialidades[indexPath.row]
    performSegue(withIdentifier: "GuardarEspecialidad", sender: self)
    }

对于其相关的“父级”,完整的学生数据,包含此“Especialidad”以及其他属性。

接下来,我尝试将每个学生的数据保存在 Core Data 上:

if nombreField.text != "" && especialidadField.text != "" {
    let context = (UIApplication.shared.delegate as!
    AppDelegate).persistentContainer.viewContext            
    let nuevoAlumno = Alumno(context: context)
    nuevoAlumno.nombre = nombreField.text!
            
    print("Data before: \(especialidadSeleccionada)")
    nuevoAlumno.especialidadRelacionada?.nombre =    especialidadSeleccionada?.nombre
    print("Data after: \(nuevoAlumno.especialidadRelacionada?.nombre)")
            
    //... and so on with the rest of properties
    
    do {
        try context.save()
    } catch {
        print("error")
    }

但它会保存除“nuevoAlumno.especialidadRelacionada?.nombre”之外的所有属性,标记为 nill。如您所见,出于调试目的,我在相等之前打印它的值,获得一个非可选值,然后在它之后,获得......一个可选值!

我几乎可以肯定这一定与他们的关系有关。我已经仔细检查了“Especialidades”的确切数据是否正确,但我真的找不到在这个“Alumno”实体中保存“especialidad.nombre”的方法......

一个想法:也许对“Alumnos”的该属性使用“didSet”可能会有所帮助?我试过了,不知道怎么弄。

有什么帮助吗?提前致谢!

【问题讨论】:

    标签: swift core-data relationship optional-parameters


    【解决方案1】:

    我已经找到了解决方案。我只是使用了不正确的属性语法:

    nuevoAlumno.especialidadRelacionada = especialidadSeleccionada
    

    现在可以了。

    【讨论】:

      【解决方案2】:

      在我看来 nuevoAlumno.especialidadRelacionada 可能是 nil。请注意,您在之前/之后打印了两种不同的东西。我会说在这一行设置一个断点:

      nuevoAlumno.especialidadRelacionada?.nombre = especialidadSeleccionada?.nombre
      

      并检查那里的所有值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-27
        • 1970-01-01
        • 2017-07-21
        • 2012-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多