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

Posted

技术标签:

【中文标题】-[NSKeyedUnarchiver decodeObjectForKey:]:无法解码类的对象【英文标题】:-[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class 【发布时间】:2016-02-15 15:03:16 【问题描述】:

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

-[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】:

我找到了上述原因。

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

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

【讨论】:

为什么你的文件名和“版本号”绑定在一起? 感谢您回答您自己的问题,这让我省了很多麻烦! 感谢回答,真的救了我的命。

以上是关于-[NSKeyedUnarchiver decodeObjectForKey:]:无法解码类的对象的主要内容,如果未能解决你的问题,请参考以下文章

NSKeyedUnarchiver.unarchiveObject 不工作 [重复]

NSKeyedUnarchiver.unarchiveObject() 取消归档旧对象

NSKeyedUnarchiver - 删除解码的数据?

NSKeyedUnarchiver - 需要尝试/捕获?

如何将代表与 NSKeyedUnarchiver 一起使用?

NSKeyedUnarchiver.unarchivedObject 为字典返回 nil