WCDB getObjects偶发性崩溃解决
引入WCDBSwift 后, 运行时偶发崩溃, 经过手动前往路径删除库文件,再次进入APP时复现崩溃率达到70%以上.
最开始以为是代码问题, 增删查改,多线程并发,for循环调用,事务,链式调用,圈尝试一遍, 依然崩溃.
后来觉得是线程并发问题,将所有数据库操作在主线程中调用,发现崩溃率下降,但是依然崩溃.
继续断点调试,发现 打断点在viewdidload 之后, 数据库加载之前, 只要有断点停顿 就不崩溃. 同理,再代码中加入1sAfter 也解决了问题. 不靠谱啊
然后觉得是不是操作频繁导致的并发问题, 将所有插入查询代码删除.模型删除.创建最基本的demo 模型 只存入1条数据,查询一条数据.
依然崩溃.
….
…
….
….
最后 我看到崩溃之前出现的log
One of the two will be used. Which one is undefined.
每次都会先出现这么个一个玩意才崩溃.
这意思是这个东西出现了两次??
全局搜索发现没有重名类 , 而且是运行时错误.
运行时 . 这个模型对象出现了两次?
好像距离真像越来越近了
WCDB 是基于oc 运行时机制的
WCDB -> 链接持有一份 model 模型
Framework 链接进入主程序时 链接一份 model 模型.
这个时候如果出现同时操作 runtime 会获取到两份 model 对象..
产生歧义,崩溃.
总结. 如果项目中有这种引用第三方库是基于oc运行时的,产生了偶发性的崩溃,检查一下引入顺序, 如果在主程序包中引用了,就不要重复引用到开发包,避免重复引用 产生这种不好查找的还会引发crash的bug 不解决还不行 , 真的浪费时间
Swift getObjects Crash · Issue #653 · Tencent/wcdb · GitHub 昨天夜里1点提的 issuse , tx还没给我答复 今天自己解决了 . 记录一下