iOS 归档 解档 unexpected class 问题

解决 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
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值