Не может сохранить пользовательские данные в дочернем NSManagedObject с Xcode 10.2.1 - PullRequest
0 голосов
/ 15 мая 2019

Я обновил Xcode до 10.2.1 и заметил, что не могу инициализировать и хранить какие-либо пользовательские свойства в дочернем классе NSManagedObject (это работало в предыдущей версии Xcode).У кого-нибудь есть такая же проблема?

Я создал новый проект.Если я создам ОДНОГО родителя и ОДНОГО дочернего объекта.Я могу хранить пользовательские данные ТОЛЬКО в родительском объекте, но если я сохраню некоторый пользовательский класс в дочернем объекте, свойство всегда будет иметь значение nil.

Вот родительский объект:

@objc(Entity)
public class Entity: NSManagedObject {

    class var entityName: String {
        return String(describing: self)
    }

    private var testClass = MyTestClass()

    init() {
        let entityName: String = type(of: self).entityName
        let context: NSManagedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
        guard let entityDescription: NSEntityDescription = NSEntityDescription.entity(forEntityName: entityName, in: context) else {
            fatalError("Failed to create entity description for name: \(entityName)")
        }
        super.init(entity: entityDescription, insertInto: context)

        print(testClass.testProperty)
    }
}

extension Entity {

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

    @NSManaged public var title: String?

}

Вот дочерняя сущность:

@objc(EntityChild)
public class EntityChild: Entity {

    private var testClassChild = MyTestClass()

    override init() {
        super.init()

        print(testClassChild.testProperty)//on this line app will crash
    }
}

extension EntityChild {

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

    @NSManaged public var title2: String?

}

Также прилагаются скриншоты выполнения кода:

Prent entity

Child entity

Примечание

работает как положено, если использовать свойство как lazy или если добавить свойства в качестве силы развертки и инициализировать их в init

...