苹果在 iOS 12 中引入了NSSecureUnarchiveFromDataTransformerName
用于 CoreData 模型实体的 Transformable 属性。我曾经将变压器名称字段保留为空,这隐式使用了NSKeyedUnarchiveFromDataTransformerName
。该变压器现已弃用,将来保持该字段为空将意味着NSSecureUnarchiveFromDataTransformerName
反而。
在 iOS 13 中,如果该字段为空,您现在会收到一条运行时警告,告诉您上述内容。我在任何地方都找不到任何相关文档,我得到的唯一参考是 WWDC 2018 核心数据最佳实践演讲,其中简要提到了我刚才所说的内容。
现在我有一个带有直接存储实体的模型HTTPURLResponse
Transformable 属性中的对象。它符合NSSecureCoding
,我在运行时检查了supportsSecureCoding
is true
.
Setting NSSecureUnarchiveFromDataTransformerName
因为 Transformer Name 崩溃并显示以下消息:
Object of class NSHTTPURLResponse is not among allowed top level class list (
NSArray,
NSDictionary,
NSSet,
NSString,
NSNumber,
NSDate,
NSData,
NSURL,
NSUUID,
NSNull
) with userInfo of (null)
所以听起来 Transformable 属性只能是这些顶级对象的。
我尝试对安全变压器进行子类化并覆盖allowedTopLevelClasses
文档建议的属性:
@available(iOS 12.0, *)
public class NSSecureUnarchiveHTTPURLResponseFromDataTransformer: NSSecureUnarchiveFromDataTransformer {
override public class var allowedTopLevelClasses: [AnyClass] {
return [HTTPURLResponse.self]
}
}
然后我想我可以创建一个自定义变压器名称,将其设置在模型中并调用setValueTransformer(_:forName:)
对于该名称,但我找不到 API 来设置默认值NSKeyedUnarchiveFromDataTransformer
作为我的自定义名称,以防我使用 iOS 11。
请记住,我正在使用 Xcode 11 Beta 5,但如果我要接受我所得到的错误的含义,这似乎并不相关。
欣赏任何想法。