加载从其他目标创建的类时,NSKeyedUnarchiver.unarchiveObjectWithFile崩溃

时间:2019-01-06 10:55:31

标签: ios xcode serialization nskeyedarchiver nskeyedunarchiver

我有一个PLIST文件,该文件是使用应用程序的生产版本创建的,并作为资源添加到项目中。生产版本的目标名称为“小马驹”。为了帮助进行应用程序测试,在同一项目“小马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密集型任务。

1 个答案:

答案 0 :(得分:0)

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

该解决方案建议通过使用

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