我为generic function
和NSKeyedArchiver
创建了NSKeyedUnarchiver
。我能够存档数组数据,但是在进行非存档操作时会遇到问题。下面是我的代码:
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代码= 4864“键'customclass1'的值为意外的类'CustomClass1'。允许的类别为'{(NSArray,MainClass)}'。“” UserInfo = {NSDebugDescription =键'customclass2'的值是意外类'CustomClass2'。允许的类是'{(NSArray,MainClass)}'。}
任何想法如何解决这个问题?
请确保您所有的班级都在向NSCoding确认。像这样的东西:
struct Class1 : NSCoding {
let objects : [Class2]
let text : String
}
struct Class2 : NSCoding {
let value : String
}