Я обновил 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?
}
Также прилагаются скриншоты выполнения кода:
Примечание
работает как положено, если использовать свойство как lazy
или если добавить свойства в качестве силы развертки и инициализировать их в init