iOS NSKeyedArchiver 归档崩溃 奇葩原因

报错现象

+[ApiBase encodeWithCoder:]: unrecognized selector sent to class 0x101fd76d8

崩溃分析

基类Model已经遵守了<NSCoding,NSCopying>协议
但是一运行,就崩溃,在别的项目中同样的代码不会崩溃。
并且,我这里就不是对model进行归档,而是已经转成了字典了,对字典json进行归档,按理说就能直接归档,但是崩溃。

原始代码

NSMutableArray *mArr = [NSMutableArray array];
for (SSXMessageModel *model in oldMessages) {
    NSMutableDictionary *dic = [model mj_keyValues];
    [mArr addObject:dic];
}
[NSKeyedArchiver archiveRootObject:mArr toFile:PathMore];

修改后的代码

for (SSXMessageModel *model in oldMessages) {
    NSMutableDictionary *dic = [model mj_keyValues];
    [dic removeObjectForKey:@"debugDescription"];
    [dic removeObjectForKey:@"description"];
    [dic removeObjectForKey:@"superclass"];

    [mArr addObject:dic];
}
[NSKeyedArchiver archiveRootObject:mArr toFile:PathMore];

原因分析

这个字典里面有三个key,把这三个key删除就能运行了。也是够奇葩了
真正的原因:暂时未知。

推荐阅读更多精彩内容

  • 1.属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作...
    曾令伟阅读 915评论 0 10
  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 3,638评论 7 64
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,498评论 0 9
  • 1、简述你项目中常用的设计模式。它们有什么优缺点?常用的设计模式有:代理、观察者、单例。(1)单例:它是用来限制一...
    LZM轮回阅读 834评论 0 6
  • 嫉妒心理真的太可怕了。。为什么要有这种想法,为什么要攀比自己得不到的东西呢 。越是想要越是得不到 赶紧调整自己的心...
    pinky西西阅读 115评论 0 0