iOS 归档 解档 unexpected class 问题

本文介绍了在使用YYModel进行编码解码时遇到的ErrorDomain=NSCocoaErrorDomainCode=4864错误,该错误表示解码的对象类型不符合预期。作者分析了问题原因,认为YYModel在编码时可能将对象处理为字典,而在解码时未能正确识别。提出了两种解决方案:一是使用'unarchivedObjectOfClasses:fromData:error:'解档,二是将解档目标类型设置为NSObject。这两种方法可以帮助避免类型不匹配的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值