記一次ReactiveObjC的神奇bug

接手的項目線上突然出現(xiàn)了一個bug~


bug

很明顯的數(shù)組越界,定位到指定控制器。emmm~ 這么多數(shù)組,也沒法定位到那個數(shù)組越界了。

不要急,分析后發(fā)現(xiàn),[0~9]取第59個。這個數(shù)組,很分頁??! 十有八九出在這里了~

先看看代碼~

controller:

[[RACObserve(self.viewModel, loadState) deliverOn:RACScheduler.mainThreadScheduler]
     subscribeNext:^(NSNumber *loadStateNumber) {
...
[self.tableView reloadData];
}];

viewModel:

    [request SuccessBlock:^( NSDictionary *data) {
        @strongify(self)
     
        self.loadState =Success;
       
       ...數(shù)據(jù)賦值
        
    } failureBlock:^( NSString *errMsg, NSInteger errCode) {
       
    }];

很明顯寫的有問題,應(yīng)該是先數(shù)據(jù)賦值,然后再刷新UI。問題應(yīng)該就是這里了!

但是,按理說應(yīng)該是必奔潰的問題,為什么一直沒有發(fā)現(xiàn)呢?

試驗了一下,神奇的事情發(fā)生了,這么寫居然是沒有問題的!
viewModel數(shù)據(jù)賦值完成后,controller才會刷新。。。奇怪,哪里怪怪的。

去掉控制器的mainThreadScheduler又試了一下,果然,必現(xiàn)。奇怪了,賦值,狀態(tài)改變,UI刷新都是在main線程的,我以為mainThreadScheduler這句代碼沒什么用,ReactiveObjC內(nèi)部不知道干了些什么。。。

記得18年時候試過一次ReactiveObjC,結(jié)果通知一直釋放不了,之后就一直比較抵觸這個東西。后來直接上手了RxSwift,沒想到又栽在這里。。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容