NSKeyedUnarchiver.unarchiveObjectWithFile 在加载从不同目标创建的 类 时崩溃

NSKeyedUnarchiver.unarchiveObjectWithFile crashes when loading classes created from a different target

我有一个 PLIST 文件,它是使用应用程序的生产版本创建的,并作为资源添加到项目中。生产版本的目标名称是"little pony"。为了帮助应用程序测试,在同一项目下通过不同的目标构建了另一个版本 "little pony 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 class 才能使加载成功。

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

我在这里找到了解决方案:

解决方案建议使用

更改NSCoding的class名称
[NSKeyedUnarchiver setClass:[Layer self] forClassName:@"little pony beta.Layer"];