Я создал 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 Code = 4864 "значение для ключа" customclass1 'был неожиданного класса' CustomClass1 '. Допустимые классы:' {(NSArray, MainClass)} '. " UserInfo = {NSDebugDescription = значение для ключа 'customclass2' было неожиданного класса 'CustomClass2'. Допустимые классы: '{(NSArray, MainClass)}'.}
Есть идеи, как решить эту проблему?