遇到這個問題十有八九是cell的重用問題傲醉,這里不是說你的cell重用有問題扶镀,而是在處理reactiveCocoa在cell上使用的rac_signalForControlEvents重用問題芯侥。
我們知道cell在移出屏幕時并沒有被銷毀,而是到了一個重用池中雁歌,放到池子前我們已經(jīng)做了
[[cell.btn rac_signalForControlEvents:UIControlEventTouchUpInside]subscribeNext:^(idx) {}];
宏浩,取不到的話再創(chuàng)建。所以取出來的cell極有可能是池子里的靠瞎,取出來之后再進(jìn)行上述的rac_signalForControlEvents操作比庄,導(dǎo)致每rac_signalForControlEvents多少次操,點擊按鈕時较坛,事件就被觸發(fā)多少次印蔗!
此時就得通過takeUntil:someSignal來終止cell.btn之前的signal了:
takeUntil:someSignal 的作用是當(dāng)someSignal sendNext時,當(dāng)前的signal就sendCompleted丑勤,someSignal就像一個拳擊裁判华嘹,哨聲響起就意味著比賽終止:
eg:
[[[cell.btn rac_signalForControlEvents:UIControlEventTouchUpInside]takeUntil:cell.rac_prepareForReuseSignal]subscribeNext:^(idx) {}];
這樣就不會多次調(diào)用了。