Core data 为关系内的属性(核心数据)设置值时“未能调用NSManagedObject类上的指定初始值设定项”

Core data 为关系内的属性(核心数据)设置值时“未能调用NSManagedObject类上的指定初始值设定项”,core-data,properties,sql-update,relationship,nsmanagedobject,Core Data,Properties,Sql Update,Relationship,Nsmanagedobject,我正在尝试使用.setValuevalue:,forKeyPath:方法更新核心数据模型的一些属性。在我的模型中,我有一个名为Alumno的实体,它有一个名为SpecialIDRelacionada的属性,与另一个名为SpecialIDad的实体相关。这是一种多对一的关系,因为一个校友只能有一个特殊的爸爸,尽管一个特殊的爸爸可以和许多校友匹配。特别是实体也有nombre作为其主要属性。下面是从Xcode生成的两个swift文件,它们来自开发人员文件夹的深处: extension Alumno {

我正在尝试使用.setValuevalue:,forKeyPath:方法更新核心数据模型的一些属性。在我的模型中,我有一个名为Alumno的实体,它有一个名为SpecialIDRelacionada的属性,与另一个名为SpecialIDad的实体相关。这是一种多对一的关系,因为一个校友只能有一个特殊的爸爸,尽管一个特殊的爸爸可以和许多校友匹配。特别是实体也有nombre作为其主要属性。下面是从Xcode生成的两个swift文件,它们来自开发人员文件夹的深处:

extension Alumno {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Alumno> {
        return NSFetchRequest<Alumno>(entityName: "Alumno")
    }

    @NSManaged public var correo: String?
    @NSManaged public var foto: Data?
    @NSManaged public var movil: String?
    @NSManaged public var nombre: String?
    @NSManaged public var repertorio: String?
    @NSManaged public var cursoRelacionado: Curso?
    @NSManaged public var ensayosRelacionados: NSSet?
    @NSManaged public var especialidadRelacionada: Especialidad?
    @NSManaged public var tutorRelacionado: Tutor?

}


extension Especialidad {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Especialidad> {
        return NSFetchRequest<Especialidad>(entityName: "Especialidad")
    }

    @NSManaged public var nombre: String?
    @NSManaged public var alumno: NSSet?
    @NSManaged public var obra: NSSet?

}
但是,当我尝试使用用户的写入字符串更新以前保存到核心数据的特殊数据时,没有任何问题:

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    alumno?.setValue(especialidadField.text, forKey: "especialidadRelacionada.nombre")
do {
    try context.save()
    } catch {
    ...
}
我收到以下错误:未能调用NSManagedObject类上指定的初始值设定项。看起来我的forKey字符串有点不对劲,但在互联网上找了这么久之后,我找不到什么


谢谢

该错误与您发布的代码无关。关于这个错误的解释,请参阅。但我在五月初的课上正确地定义了我的校友,特别是爸爸,我想:。。。其余不相关的属性更新没有问题。因此实例的初始化是正确的,我认为:我认为您的forKey:的问题是您应该使用forKeyPath:来遍历关系。谢谢!我也这么认为。但我找不到符合我需要的确切语法。有什么建议吗?
var alumno: Alumno?
var esNuevo: Bool = true
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
var especialidadSeleccionada: Especialidad?
var cursoSeleccionado: Curso?
var tutorSeleccionado: Tutor?
var alumno: Alumno?
var esNuevo: Bool = true
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
var especialidadSeleccionada: Especialidad?
var cursoSeleccionado: Curso?
var tutorSeleccionado: Tutor?