swift - 核心数据和Xcode 11 : Please switch to using “NSSecureUnarchiveFromData” or a subclass of NSSecureUnarchiveFromDataTransformer

标签 swift xcode core-data core-data-migration

刚移到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可以正常工作

最佳答案

将Transformer属性设置为NSSecureUnarchiveFromDataTransformer可以解决我的情况下的警告。为此,选择属性并将其转换器类型设置为NSSecureUnarchiveFromDataTransformer并通过按commond + R再次运行。

谢谢,
拉特内斯瓦尔

关于swift - 核心数据和Xcode 11 : Please switch to using “NSSecureUnarchiveFromData” or a subclass of NSSecureUnarchiveFromDataTransformer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58053355/

相关文章:

ios - 两个 NavigationBar 显示

objective-c - 将数据存储在 MKAnnotation 中?

ios - 类型 'X' 不符合协议(protocol) 'Encodable'

core-data - 应用程序因核心数据的一个属性而崩溃

objective-c - 如何像 "filteredArrayUsingPredicate"那样过滤NSFetchedResultsController

ios - 记住 uiswitch 的状态

ios - NSURLSessionDataDelegate 未调用

ios - 没有 prepareForSegue 的 Swift 委托(delegate)

xcode - xcode sqlite3删除数据库错误

ios - EXC_BAD_ACCESS,从另一个类调用按钮方法时