重命名Xcode项目后出现NSKeyedUnarchiver错误
我只是重命名我的Xcode项目,当我跑了它,我得到这个错误:
2015-11-14 05:32:42.337 Buck Tracker [3537:1456100] *因未捕获的exception'NSInvalidUnarchiveOperationException'而终止应用程序,原因:'* – [NSKeyedUnarchiver decodeObjectForKey:]:无法解码类的对象(iBudgeter.Record)for键(NS.objects); 该类可以在源代码或未链接的库中定义“
Buck Tracker
是新名称, iBudgeter
是原始名称。 Record
是我创build的一个自定义NSObject
来存储一些数据。
我试图重命名项目回到iBudgeter
但它没有工作。 在git中恢复到以前的版本确实有帮助,但是当我重新命名时,我得到了同样的错误。
那么有什么build议?
不要改变你的项目名称。 只要改变显示名称。 这是Info.plist中的“Bundle显示名称”条目。 您可能需要添加条目。
如果您想更改OS X应用程序的显示名称,请参阅此答案 。
另一种方法是修复用于NSCoding的类的名称。 你只需要使用:
-
NSKeyedArchiver.setClassName("Record", forClass: Record.self
在序列化之前 -
NSKeyedUnarchiver.setClass(Record.self, forClassName: "Record")
在反序列化之前
在需要的地方。
看起来iOS扩展在类名的后面加上扩展名。
如果您将文件移动到另一个模块,则需要添加其他信息
NSKeyedArchiver.setClassName("OldModule.ClassName", for: ClassName.self) NSKeyedUnarchiver.setClass(ClassName.self, forClassName: "OldModule.ClassName")