我有一个对象,我们使用NSKeyedArchiver
将其归档为类Foo
然后,我将目标名称从Apple
更改为Orange
。它投入生产后,用户在启动时就崩溃了。但不是所有的。日志指向NSKeyedUnarchiver
我从目标被称为Foo
以及目标被称为Apple
时抓取了存档的Orange
文件,并将其转换为xml,以便我可以读取它。主要和唯一的区别(我认为)是classname
键分别是{{1}}和Apple.Foo
。
如何获取其中一个存档文件并检查其存档类名?
如果我这样做Orange.Foo
,它将崩溃。
理想情况下,我会这样:
NSKeyedUnarchiver.unarchiveObject(withFile: path) as? Foo
但是显然它不能像这样工作。关于如何检查文件是否已损坏并在不导致应用崩溃的情况下将其删除的任何想法?
感谢您的帮助!
答案 0 :(得分:1)
最近几天,我了解到您可以同时为取消存档设置两个不同的类名,并且它们都将起作用:
NSKeyedUnarchiver.setClass(Foo.classForKeyedUnarchiver(), forClassName: "Apple.Foo")
NSKeyedUnarchiver.setClass(Foo.classForKeyedUnarchiver(), forClassName: "Orange.Foo")
现在,取消归档时文件实际具有的类名无关紧要。