首页 > 解决方案 > NSKeyedUnarchiver.unarchiveObjectWithFile 在加载从不同目标创建的类时崩溃

问题描述

我有一个 PLIST 文件,它是使用应用程序的生产版本创建的,并作为资源添加到项目中。生产版本的目标名称是“小马驹”。为了帮助应用程序测试,在同一个项目“little pony beta”下通过不同的目标构建了另一个版本。在运行时,beta 应用程序尝试加载 PLIST 并崩溃并显示以下消息:

Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: '*** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (little pony.Layer) for key (NS.objects); the class may be defined in source code or a library that is not linked'

看起来,PLIST 应该包含little pony beta.Layer而不是little pony.Layer类,以便加载成功。

有什么方法可以NSKeyedUnarchiver.unarchiveObjectWithFile使用不同的命名空间来实现它吗?当然,我不想创建两组不同的预编译数据,因为这是 CPU 密集型任务。

标签: iosxcodeserializationnskeyedarchivernskeyedunarchiver

解决方案


我在这里找到了解决方案: https ://stackoverflow.com/a/37162921/279813

该解决方案建议通过使用更改 NSCoding 的类名称

[NSKeyedUnarchiver setClass:[Layer self] forClassName:@"little pony beta.Layer"];

推荐阅读