如何将自定义对象取消存档到Swift中的自定义类以外的其他内容

时间:2018-07-03 21:00:43

标签: ios swift nskeyedunarchiver

我有一个对象,我们使用NSKeyedArchiver将其归档为类Foo

然后,我将目标名称从Apple更改为Orange。它投入生产后,用户在启动时就崩溃了。但不是所有的。日志指向NSKeyedUnarchiver

我从目标被称为Foo以及目标被称为Apple时抓取了存档的Orange文件,并将其转换为xml,以便我可以读取它。主要和唯一的区别(我认为)是classname键分别是{​​{1}}和Apple.Foo

如何获取其中一个存档文件并检查其存档类名?

如果我这样做Orange.Foo,它将崩溃。

理想情况下,我会这样:

NSKeyedUnarchiver.unarchiveObject(withFile: path) as? Foo

但是显然它不能像这样工作。关于如何检查文件是否已损坏并在不导致应用崩溃的情况下将其删除的任何想法?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

最近几天,我了解到您可以同时为取消存档设置两个不同的类名,并且它们都将起作用:

NSKeyedUnarchiver.setClass(Foo.classForKeyedUnarchiver(), forClassName: "Apple.Foo")
NSKeyedUnarchiver.setClass(Foo.classForKeyedUnarchiver(), forClassName: "Orange.Foo")

现在,取消归档时文件实际具有的类名无关紧要。