WCDB getObjects偶發(fā)性崩潰解決
引入WCDBSwift 后, 運行時偶發(fā)崩潰, 經(jīng)過手動前往路徑刪除庫文件,再次進入APP時復(fù)現(xiàn)崩潰率達到70%以上.
最開始以為是代碼問題, 增刪查改,多線程并發(fā),for循環(huán)調(diào)用,事務(wù),鏈?zhǔn)秸{(diào)用,圈嘗試一遍, 依然崩潰.
后來覺得是線程并發(fā)問題,將所有數(shù)據(jù)庫操作在主線程中調(diào)用,發(fā)現(xiàn)崩潰率下降,但是依然崩潰.
繼續(xù)斷點調(diào)試,發(fā)現(xiàn) 打斷點在viewdidload 之后, 數(shù)據(jù)庫加載之前, 只要有斷點停頓 就不崩潰. 同理,再代碼中加入1sAfter 也解決了問題. 不靠譜啊
然后覺得是不是操作頻繁導(dǎo)致的并發(fā)問題, 將所有插入查詢代碼刪除.模型刪除.創(chuàng)建最基本的demo 模型 只存入1條數(shù)據(jù),查詢一條數(shù)據(jù).
依然崩潰.
….
…
….
….
最后 我看到崩潰之前出現(xiàn)的log
One of the two will be used. Which one is undefined.
每次都會先出現(xiàn)這么個一個玩意才崩潰.
這意思是這個東西出現(xiàn)了兩次??
全局搜索發(fā)現(xiàn)沒有重名類 , 而且是運行時錯誤.
運行時 . 這個模型對象出現(xiàn)了兩次?
好像距離真像越來越近了
WCDB 是基于oc 運行時機制的
WCDB -> 鏈接持有一份 model 模型
Framework 鏈接進入主程序時 鏈接一份 model 模型.
這個時候如果出現(xiàn)同時操作 runtime 會獲取到兩份 model 對象..
產(chǎn)生歧義,崩潰.
總結(jié). 如果項目中有這種引用第三方庫是基于oc運行時的,產(chǎn)生了偶發(fā)性的崩潰,檢查一下引入順序, 如果在主程序包中引用了,就不要重復(fù)引用到開發(fā)包,避免重復(fù)引用 產(chǎn)生這種不好查找的還會引發(fā)crash的bug 不解決還不行 , 真的浪費時間
Swift getObjects Crash · Issue #653 · Tencent/wcdb · GitHub 昨天夜里1點提的 issuse , tx還沒給我答復(fù) 今天自己解決了 . 記錄一下