Основные данные и Xcode 11: пожалуйста, переключитесь на использование «NSSecureUnarchiveFromData» или подкласса NSSecureUnarchiveFromDataTransformer - PullRequest
0 голосов
/ 22 сентября 2019

Только что перешел на Xcode 11 и получаю следующее падение при запуске:

CoreData: fault: One or more models in this application are using transformable properties with transformer names that are either unset, or set to NSKeyedUnarchiveFromDataTransformerName. Please switch to using "NSSecureUnarchiveFromData" or a subclass of NSSecureUnarchiveFromDataTransformer instead. At some point, Core Data will default to using "NSSecureUnarchiveFromData" when nil is specified, and transformable properties containing classes that do not support NSSecureCoding will become unreadable.
CoreData: warning: Property 'color' on Entity 'Group' is using nil or an insecure NSValueTransformer.  Please switch to using "NSSecureUnarchiveFromData" or a subclass of NSSecureUnarchiveFromDataTransformer instead.

Я создаю NSPersistentContainer при запуске, используя код ниже:

private let container: NSPersistentContainer = {
    let container = NSPersistentContainer(name: "MyApp", managedObjectModel: MyAppModelVersion.current.managedObjectModel())
    let storeDescription = NSPersistentStoreDescription(url: getStoreURLWithUserName())
    storeDescription.shouldMigrateStoreAutomatically = true
    storeDescription.shouldInferMappingModelAutomatically = true
    container.persistentStoreDescriptions = [storeDescription]
    return container
}()

Ошибкапроисходит сразу после выполнения этой строки:

    let container = NSPersistentContainer(name: "MyApp", managedObjectModel: MyAppModelVersion.current.managedObjectModel())

У меня также есть свойство с именем 'Color in a Group`, которое можно преобразовать:

@NSManaged public var color: UIColor?
@NSManaged public var hexColorValue: String?

Ниже показано, как установить свойство:

public var hexColor: String? {
    get {
        return self.hexColorValue
    }
    set {
        self.hexColorValue = newValue
        if let str = newValue {
            self.color = UIColor(hex: str)
        }
    }
}

Вот как выглядит свойство в Базовых данных:

enter image description here

Я не уверен, как из него восстановитьсяавария.Это работало нормально с Xcode 10

1 Ответ

1 голос
/ 23 сентября 2019

Для трансформируемого атрибута вам необходимо установить его тип в поле Custom Class.

Например, у меня есть трансформируемое поле, в котором хранится массив чисел, а его пользовательский класс объявлен как [Int16].Это, скорее всего, причина аварии.И, как упоминалось ранее @vadian, вам не нужны оба поля.

После исправления сбоя вы можете избавиться от предупреждения, установив для поля Transformer значение NSSecureUnarchiveFromData (вы просто вводите его вполе)

...