我正在使用 Core Data 并以编程方式创建我的数据模型。
我无法让继承发挥作用,因为在子级中,继承的 NSRelationshipDescription
的 destinationEntity
始终变为 nil。
测试表明,只有当我以编程方式进行继承时,才会出现问题,如果我通过 Xcode 模型编辑器进行继承,destinationEntity
也会在子级中保留正确的值。
有人知道哪里出了问题吗?
这里是 Playground :
import Foundation
import CoreData
func listPropertiesFrom(entity: NSEntityDescription) {
print("========== Properties from entity \"\(entity.name!)\" ============")
for property in entity.properties {
print(property)
}
}
class Rect: NSManagedObject {
}
class Base: NSManagedObject {
@NSManaged var rect: Rect
}
class Child: Base {
}
// ----------- Define Rect ----------
let rectEntity = NSEntityDescription()
rectEntity.name = "rect"
rectEntity.managedObjectClassName = "Rect"
// ----------- Define Base -----------
let baseEntity = NSEntityDescription()
baseEntity.name = "base"
baseEntity.managedObjectClassName = "Base"
baseEntity.isAbstract = true
let rectRelation: NSRelationshipDescription = NSRelationshipDescription()
rectRelation.name = "rect"
// >>>>>>>>>>> Error: This becomes nil in the child! >>>>>>>>>>>
rectRelation.destinationEntity = rectEntity
rectRelation.minCount = 1
rectRelation.maxCount = 1
rectRelation.isOptional = false
rectRelation.deleteRule = NSDeleteRule.cascadeDeleteRule
baseEntity.properties = [rectRelation]
// ----------- Define Child ------------
let childEntity = NSEntityDescription()
childEntity.name = "child"
childEntity.managedObjectClassName = "Child"
baseEntity.subentities.append(childEntity)
// No own properties! All inherited!
// -----------
listPropertiesFrom(entity: baseEntity)
listPropertiesFrom(entity: childEntity)
最佳答案
在将实体添加到模型后,这似乎已修复。添加行:
let model = NSManagedObjectModel.init();
model.entities = [baseEntity, rectEntity, childEntity]
就在您登录之前。
我不知道为什么会发生这种情况,但似乎 NSManagedObjectModel
不仅仅包含指向实体的指针,它似乎还在管理继承方面发挥着作用。
这也解释了为什么它在使用模型编辑器时有效 - 因为它会创建一个 NSManagedObjectModel
- 而不是实体数组。
关于ios - 核心数据 : Programmatically inherited relations become nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45587126/