-[NSKeyedUnarchiver decodeObjectForKey:]: 无法解码 class 的对象

-[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class

我在更新我的应用程序后遇到了一个我不明白的错误。我在应用程序商店中已有一个应用程序。我将一些特定于应用程序的数据存档并存储在应用程序支持目录内的文件中。每次应用程序启动并发送到后台时,我都在读取和存储数据。到目前为止一切都很好。现在我发布了应用程序的更新。更新后,当我启动应用程序并尝试取消归档数据时,它崩溃并出现以下异常。

-[NSKeyedUnarchiver decodeObjectForKey:]: 
cannot decode object of class (ProjectName.ProjectFile) for key (root);
the class may be defined in source code or a library that is not linked.

如果我删除应用程序并重新安装应用程序,一切正常。

我的原始应用程序和更新都是用 Swift 编写的。我也没有将文件名从版本 1 更改为版本 2。有人知道发生了什么吗?

上面的原因我找到了。

基本上我将项目目标名称从版本 1 更改为版本 2。因此它试图解码 ProjectName2.ProjectFile 而不是 ProjectName.ProjectFile

可能的避免方法是在开始第一个版本时 @objc(PFUserUtils) 为 class。如果你像我一样更改目标名称,请使用 NSKeyedUnarchiver.setClass(className forClassName:name) 方法将 class 名称设置为旧名称。