重命名Xcode项目

时间:2015-11-13 21:38:43

标签: ios xcode swift nsdata nskeyedunarchiver

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

  

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

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

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

那么有什么建议吗?

6 个答案:

答案 0 :(得分:14)

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

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

在任何需要的地方。

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

答案 1 :(得分:6)

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

adding Bundle display name to Info.plist

如果要更改OS X应用程序的显示名称,请参阅this answer

答案 2 :(得分:2)

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

NSKeyedArchiver.setClassName("OldModule.ClassName", for: ClassName.self)
NSKeyedUnarchiver.setClass(ClassName.self, forClassName: "OldModule.ClassName")

答案 3 :(得分:0)

仅将使用NSCoding协议的ClassA重命名为ClassB之后,我仍然遇到相同的错误。

对我来说,问题是我在UserDefaults中使用了ClassA。 因此,在UserDefaults .plist中存储了旧名称ClassA。

应用程序启动时,它尝试读取.plist,并且由于名称不匹配,导致应用程序崩溃。

对我来说,解决方案只是删除用户默认设置,然后再次运行该应用程序,它可以正常工作。

要删除默认值,我在终端中使用了以下命令:

defaults delete buldle-identifier

答案 4 :(得分:0)

昨晚我遇到了这个问题。在调查3小时后,只需将“产品名称”(在“构建设置”下)更改回原始值即可对其进行排序。

答案 5 :(得分:0)

只需删除旧应用,然后再次运行对我来说就可以