重命名Xcode项目后出现NSKeyedUnarchiver错误

hkl*_*lel 6 xcode nsdata ios nskeyedunarchiver swift

我刚刚重命名了我的Xcode项目,当我运行它时出现了这个错误:

2015-11-14 05:32:42.337 Buck Tracker [3537:1456100] *由于未捕获异常'NSInvalidUnarchiveOperationException'而终止app,原因:'* - [NSKeyedUnarchiver decodeObjectForKey:]:无法解码类的对象(iBudgeter.Record)关键(NS.objects); 该类可以在源代码中定义,也可以在未链接的库中定义

Buck Tracker是新名称,iBudgeter是原始名称.RecordNSObject我创建的用于存储一些数据的自定义.

我尝试将项目重命名为iBudgeter但它没有用.恢复到git中的先前版本确实有帮助,但是当我再次重命名它时我得到了同样的错误.

那有什么建议吗?

ter*_*ina 14

另一种方法是修复用于NSCoding的类的名称.你只需要使用:

  • NSKeyedArchiver.setClassName("Record", forClass: Record.self 在序列化之前
  • NSKeyedUnarchiver.setClass(Record.self, forClassName: "Record") 在反序列化之前

在需要的地方.

看起来iOS扩展名在类名前面加上扩展名.


tt.*_*lew 7

如果您将文件移动到另一个模块,则需要添加其他信息

NSKeyedArchiver.setClassName("OldModule.ClassName", for: ClassName.self)
NSKeyedUnarchiver.setClass(ClassName.self, forClassName: "OldModule.ClassName")
Run Code Online (Sandbox Code Playgroud)


rob*_*off 6

不要更改项目名称.只需更改显示名称即可.它是Info.plist中的"Bundle display name"条目.您可能需要添加条目.

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

如果要更改OS X应用程序的显示名称,请参阅此答案.