重命名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显示名称”条目。 您可能需要添加条目。

将Bundle显示名称添加到Info.plist

如果您想更改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")