解决 Error Domain=NSCocoaErrorDomain Code=4864 "value for key 'xxx' was of unexpected class 'xxx'.的问题

情况如下:

声明一个继承于NSObject 的 TestModel 对象,并遵循 NSSecureCoding 协议

重写以下方法,使用YYModel实现

  • - (void)encodeWithCoder:(NSCoder *)coder
  • - (nullable instancetype)initWithCoder:(nonnull NSCoder *)coder
  • + (BOOL)supportsSecureCoding

ViewContrller 实现以下方法:

运行代码就会报错,且无法获取到对象

Error Domain=NSCocoaErrorDomain Code=4864 "value for key 'modelDic' was of unexpected class 'NSDictionary'. Allowed classes are '{( TestModel )}'

猜测如下:

  • YYModel 编码时会把对象作为字典处理
  • YYModel 解码时识别到字典就把它当成目标对象
  • 那么就需要我们显式指定该成员变量的类型。

解决方法如下:

方法一:使用 unarchivedObjectOfClasses: fromData: error: 解档 (推荐)

方法二:使用NSOject作为解档目标类型并接收

作者:vony
链接:https://juejin.cn/post/6844904103747780615
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

iOS 归档 解档 unexpected class 问题相关推荐

  1. iOS 归档 解档使用总结

    2019独角兽企业重金招聘Python工程师标准>>> 1.比较 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径:     NSUserD ...

  2. 【iOS数据持久化】归档解档(NSKeyedArchiver/ NSKeyedUnarchiver)

    简介 归档(Archive)也称为序列化(serialization),把对象转化为字节码,以文件的形式存储在磁盘上,只要遵循了NSCoding协议的对象都可以实现归档和解档(大部分foundatio ...

  3. IOS 利用运行时机制来进行归档解档

    前言:我们需要对一个类的属性进行归档解档的时候属性特别的多,这时候,我们就会写很多对应的代码,但是如果使用了runtime就可以动态设置,就会变的很轻松! 首先需要导入<objc/runtime ...

  4. iOS 利用归档解档实现类似微博及一些CRM类软件的草稿箱思路

    实际上就是写一个model类 然后将要存数据放到model中,然后将model添加到数组,然后对数组及数组中放的model归档,本地存储起来,解档,拿到数据在需要的地方显示出来 因为model是一个自 ...

  5. 四种数据持久化方式(上) :属性列表与归档解档

    iOS中的永久存储,也就是在关机重新启动设备,或者关闭应用时,不会丢失数据.在实际开发应用时,往往需要持久存储数据的,这样用户才能在对应用进行操作后,再次启动能看到自己更改的结果与痕迹. iOS开发中 ...

  6. 使用偏好设置、属性列表、归档解档保存数据、恢复数据

    数据持久化就是将文件保存到硬盘,以便下次运行时可以读取或永久保存.iOS提供了以下几种持久化方案: NSUserDefaults (偏好设置) property list 即Plist (属性列表) ...

  7. 数据存储之归档解档 NSKeyedArchiver NSKeyedUnarchiver

    在构建应用程序时,有一个重要的问题是如何在每次启动之间持久化数据,以便重现最后一次关闭应用前的状态.在iOS和OS X上,苹果提供了三种选择:Core Data.属性列表(Property List) ...

  8. runtime自动归档/解档

    原文出自:标哥的技术博客 前言 善用runtime,可以解决自动归档解档.想想以前归档是手动写的,确实太麻烦了.现在有了runtime,我们可以做到自动化了.本篇文章旨在学习如何通过runtime实现 ...

  9. iOS 之归档解档(nskeyarchieve)

    iOS 归档的记录 归档是一种很常用的文件储存方法,几乎任何类型的对象都能够被归档储存(实际上是一种文件保存的形式),浏览网上的一些资料后,并结合自己的一些经验,总结成此文. 一.使用archiveR ...

最新文章

  1. 20175317 《Java程序设计》第一周学习总结
  2. 使 WebBrowser 更简单的新加和执行 js, 可安装 jQuery 脚本的 C# 开源代码 - IEBrowser [1]...
  3. SSM整合时Maven项目的pom.xml版本兼容的代码备份
  4. java的两种运行方式Applet和Application你真的懂吗
  5. Python下tornado实现webSocket实现
  6. CodeForces - 1339E Perfect Triples(打表找规律)
  7. 最快解决在win下杀死端口号的方式
  8. linq Distinct
  9. 有类似split的命令吗_5分钟学linux命令之split
  10. PagingAndSortingRepository –如何与Thymeleaf一起使用
  11. The operation could not be performed because OLE DB provider SQLNCLI11 for linked server SDSSDFCC...
  12. easymock使用方法_EasyMock静态方法– PowerMock,JUnit 4,TestNG
  13. Java中BufferedReader和scanner的对比
  14. 计算机EXE文件改参数,exe文件修改器(eXeScope)
  15. adb连接 vivo_vivo手机驱动
  16. Java工具集-农历日期工具类
  17. CentOS7下ldap的安装
  18. 基于程序员职业对于婚配问题的研究——程序员为何单身?
  19. Win7通过CMD命令开启无线热点
  20. c++ 序列化库iguana使用总结

热门文章

  1. C语言——C语言程序的编写
  2. CentOS 7 重启 Failed to mount /sysroot
  3. [Err] [Dtf] 1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_T
  4. 为什么macbook不能删除u盘里东西?苹果电脑如何删除u盘文件
  5. zerotier 配置
  6. 怎么让微信群裂变拉人微信群如何裂变
  7. 音频剪辑软件哪个好【资源分享】
  8. Excel 2010 SQL应用100 域聚合函数之DSUM
  9. android动态平分屏幕,Android开发RecyclerView的item平分屏幕
  10. 热力学基础:热力学第一定律和热力学第二定律,基本过程量的热量含义