【发布时间】:2020-01-22 23:41:58
【问题描述】:
刚迁移到 Xcode 11 并在启动时遇到以下崩溃:
CoreData:故障:此应用程序中的一个或多个模型正在使用未设置或设置为 NSKeyedUnarchiveFromDataTransformerName 的转换器名称的可转换属性。请改用“NSSecureUnarchiveFromData”或 NSSecureUnarchiveFromDataTransformer 的子类。在某些时候,当指定 nil 时,Core Data 将默认使用“NSSecureUnarchiveFromData”,并且包含不支持 NSSecureCoding 的类的可转换属性将变得不可读。
CoreData:警告:实体“组”上的属性“颜色”正在使用 nil 或不安全的 NSValueTransformer。请改用“NSSecureUnarchiveFromData”或 NSSecureUnarchiveFromDataTransformer 的子类。
我正在使用以下代码在启动时创建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())
我还有一个名为“Colorin aGroup”的可变形实体:
@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)
}
}
}
这是该属性在 Core Data 中的样子:
我不确定如何从这次崩溃中恢复。这在 Xcode 10 上运行良好
【问题讨论】:
-
请仔细阅读错误,非常清楚。但是为什么要同时保存颜色和十六进制字符串表示?后者就足够了。
-
我想继续使用
nil,因为它一直运行良好。我需要为每条记录保存十六进制和 UIColor 属性,这样我就不必来回转换。 -
您确实不需要两者都需要保存。计算属性提供了转换,而保存两者的成本要高得多。否则按照错误提示执行。
-
谢谢。有关如何通过该错误的任何建议?
-
我希望在创建
Transformer方面获得一些帮助。我想我必须弄清楚并在这里发布解决方案。
标签: swift xcode core-data core-data-migration