core-data - 为关系内部的属性设置值时“无法在 NSManagedObject 类上调用指定的初始化程序”(核心数据)
问题描述
我正在尝试使用.setValue(value:, forKeyPath:)
方法更新我的核心数据模型的一些属性。在我的模型中,我有一个名为“Alumno”的实体,它有一个名为“especialidadRelacionada”的属性,该属性与另一个名为“Especialidad”的实体相关。这是一个多对一的关系,因为一个“Alumno”只能有一个“Especialidad”,尽管一个“Especialidad”可以匹配多个“Alumnos”。“Especialidad”实体也具有“名词”作为其主要属性。这是从 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?
}
我从用户写入的文本字段中获取要设置的“Especialidad”字符串:
@IBOutlet weak var especialidadField: UITextField!
但是,当我尝试使用用户写入的字符串更新“Especialidad”数据(以前完全没有问题保存到核心数据)时:
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
alumno?.setValue(especialidadField.text, forKey: "especialidadRelacionada.nombre")
do {
try context.save()
} catch {
...
}
我收到此错误:“无法在 NSManagedObject 类上调用指定的初始化程序”。我的“forKey”字符串似乎有问题,但是在互联网上寻找了这么多时间之后,我找不到什么。
谢谢!
解决方案
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?
推荐阅读
- javascript - 将结束标签移动到包含元素的末尾
- netbeans - 更新 Netbeans 8.1 模块项目模板
- ios - 如何计算具有不同条件的 Swift 对象数组中元素的出现次数
- google-bigquery - 大查询中IP地址列的数据类型
- c - printf 如何在打印出 strtok 的标记时知道它们的结尾?
- sql - 通过 SQL Server 选择组中没有的列
- ios - 具有 cocoapods 依赖的独立 react-native 模块
- reactjs - 设置反应带崩溃的时间
- sql-server - 在 kafka 中使用 kafka-connect-jdbc 在 MS SQL 表中摄取嵌套 Avro 时出错
- python - Python 3 中更苗条的替代方案是什么?