【发布时间】:2020-04-07 06:53:33
【问题描述】:
我为NSKeyedArchiver 和NSKeyedUnarchiver 创建了一个generic function。我能够存档阵列数据,但在进行取消存档时会遇到问题。以下是我的代码:
NSKeyedArchiver 代码:
func cacheData<T>(data: T) {
do {
let codedData = try NSKeyedArchiver.archivedData(withRootObject: data, requiringSecureCoding: false)
} catch {
print("Exception while caching data \(error)")
}
}
NSKeyedUnarchiver 代码:
func getCacheData<T>(encodedData: Data, ofClass: T.Type) -> [T]? {
do{
if let decodedData = try NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSArray.self, T.self as! AnyClass], from: encodedData){
return decodedData as? [T]
}
} catch {
print("Exception while decode array cache data \(error)")
}
return nil
}
上面的代码适用于只有strings、integers 变量,但如果有custom classes 变量则失败。如何在NSKeyedUnarchiver 中允许这些自定义类。
我遇到以下错误:
解码数组缓存数据时出现异常错误 Domain=NSCocoaErrorDomain Code=4864 "key 'customclass1' 的值是 意外的类“CustomClass1”。允许的类是 '{( NSArray, MainClass )}'。" UserInfo={NSDebugDescription=key 'customclass2' 的值是意外的类 'CustomClass2'。允许的类是 '{( NSArray, MainClass )}'.}
知道如何解决这个问题吗?
【问题讨论】:
-
自定义类是否使用 Codable 协议扩展?
标签: ios arrays swift nskeyedarchiver nskeyedunarchiver