ios - 核心数据 : Programmatically inherited relations become nil

标签 ios inheritance core-data

我正在使用 Core Data 并以编程方式创建我的数据模型。 我无法让继承发挥作用,因为在子级中,继承的 NSRelationshipDescriptiondestinationEntity 始终变为 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/

相关文章:

ios - 更改 UITableViewCell 的高度,无需 heightForRowAtIndexPath

ios - OCMock 方法名称冲突

ios - 拉入 UICollectionView 后 UIRefreshControl 不粘

mysql - 计算实体,在 Doctrine2 中?

grails - GORM 继承列定义映射

ios - iTunes上的“可用日期”是否连接新界面?

css - css 样式继承是如何工作的

ios - Core Data轻量级迁移有多少个迁移步骤?

iphone - 核心数据一对一关系,保存不起作用

ios - NSManagedObject 保存或插入检查