У меня есть объект, где мы использовали NSKeyedArchiver
для архивирования как класс Foo
Затем я изменил имя цели с Apple
на Orange
. И это пошло в производство, и пользователи начали падать при запуске. Но не все. И журналы указывают на NSKeyedUnarchiver
Я взял и взял заархивированный файл Foo
, когда цель называлась Apple
и когда она называлась Orange
, и конвертировалась в xml, чтобы я могла ее прочитать. Основное и единственное отличие (я думаю) состоит в том, что клавиша classname
равна Apple.Foo
и Orange.Foo
соответственно.
Как получить один из архивных файлов и проверить его имя в заархивированном классе?
Если я сделаю NSKeyedUnarchiver.unarchiveObject(withFile: path) as? Foo
, он рухнет.
В идеале я бы так что-то вроде:
let object = NSKeyedUnarchiver.unarchiveObject(withFile: path) as? [String : Any]
let name = object!["classname"]!
if name == "Apple.Foo" {
//delete the cache and let it rebuild
}
Но, очевидно, это не работает так. Любые идеи о том, как я могу проверить, что у меня есть поврежденный файл и удалить его без сбоя приложения?
Спасибо за помощь!