ios - 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 密集型任务。
解决方案
我在这里找到了解决方案: https ://stackoverflow.com/a/37162921/279813
该解决方案建议通过使用更改 NSCoding 的类名称
[NSKeyedUnarchiver setClass:[Layer self] forClassName:@"little pony beta.Layer"];
推荐阅读
- c# - 使用 Sqllite 数据库在 Xamarin 跨平台中完成登录代码
- android - 是否有 txt 文件的目录,就像用于图像的 drawable 一样?
- php - 在默认用户表中更改 laravel 5.6 中的电子邮件列名称
- r - 使用 zonal 命令进行加权平均计算
- jquery - jQuery.sap.equal 比较排序
- php - Wordpress:FORM 标签不只显示在 Admin Post Lists 的第 1 篇文章中
- android - 使用@IdRes 时,Android Studio 不会突出显示无效的 Kotlin 接收器
- python - django调用多个模型
- android - 使用 SimpleTarget 时的滑行过渡 (withCrossFade)
- javascript - 在以编程方式插入 HTML 时,无法在 trix-editor 中为任何标签添加 ID 或类等属性