ReactiveCocoa (RAC) TableView(數(shù)據(jù)篇)

上一篇寫了點簡單的 KVO的數(shù)據(jù)綁定快骗,剛了解這個特性的時候娜庇,我就想到了 利用到tableview上,感覺可以實現(xiàn)一種非常簡單的綁定 model 和cell 的方式方篮,但是經(jīng)過實踐 名秀,是會出現(xiàn)Bug的,再研究恭取,然后解決掉這個Bug后泰偿,感覺對Cell的綁定 操作有點多,對cell展示的流暢性 感覺會產(chǎn)生阻礙蜈垮,所以又放棄了這種方式耗跛,特別簡單的Cell還是可以用的裕照,下面讓我們來 一起探討下吧

承接上篇

[RACObserve(model, title) subscribeNext:^(NSString *x) {
        self.textLabel.text = x;
}];

我們經(jīng)常會有改變cell對應(yīng)的Model的屬性,然后要更新到Cell上的调塌,一般我的做法是 改變Model的屬性后晋南,

1.找到Model對應(yīng)的cell
2.刷新 Model對應(yīng)的Cell

應(yīng)該會有一大部分人都是這樣做的,如果有更好的辦法請評論聯(lián)系我羔砾,回歸正題负间,結(jié)合 RAC 我們可以把 Model的屬性和 Cell的subviews(label imageView等)綁定在一起,這樣就只需要 改變Model的屬性的值姜凄,就會自動調(diào)用 rac的block政溃,cell.m里的代碼如下

-(void)bindModel:(YFRACTestModel *)model
{
    [RACObserve(model, title) subscribeNext:^(NSString *x) {
        self.textLabel.text = x;
    }];
    
    [RACObserve(model, sex) subscribeNext:^(NSString *x) {
        self.detailTextLabel.text = x;
    }];
}

好像很方便呢,一口氣寫 10個列表好像都不費力了呢
我也高興了好一陣子态秧,覺得 春天到了董虱,寫程序也是一件不累人多拿錢的活呢,仔細一想 我的天哪申鱼,Bug已經(jīng)悄無聲息的滲透了進來愤诱,

讓我們來 分析下,

bindModel: 這個方法是給Cell綁定數(shù)據(jù)用的捐友,
由于Cell是復(fù)用的淫半,所以同一個Cell可能 執(zhí)行 好多次 bindModel: 方法,
也就意味著model的屬性 和 cell的UI 會經(jīng)過多次的綁定,
而且 新的Model的綁定并不會覆蓋掉 舊的model的綁定匣砖,
這就導(dǎo)致了 cell 綁定了多個Model的屬性科吭,
改變?nèi)魏我粋€Model的值,都會更新cell的顯示脆粥,這顯然不是我們想要的
我們寫個tableView的Demo來驗證下砌溺,
點擊cell改變Model的值,看看哪個Cell會更新,
附上 點擊cell的代碼
 if (indexPath.row - 10 < 0)
 {
     NSLog(@"請點擊更下方的cell");
     return;
 }

YFRACTestModel *model = self.dataArray[indexPath.row - 10];
model.sex = @"00000";

效果

000000.gif

通過這張圖变隔,我們看到了 點擊 當前cell改變相差10個下標的Model的值规伐,相差1個下表的cell 更新了UI,這顯然是一個bug了

Demo代碼
https://pan.baidu.com/s/1o8NUh1S 提取碼:v624

Bug出現(xiàn)匣缘,就該干掉猖闪,讓我們 解決掉它
既然Bug是由于 多次綁定出現(xiàn)的,那我們就在新的綁定關(guān)系發(fā)生前肌厨,把舊的綁定關(guān)系除掉培慌,經(jīng)過調(diào)研,這確實是可行的柑爸,我們看下代碼
cell.m 代碼


#import "YFTestCell.h"

#import <ReactiveCocoa.h>

@implementation YFTestCell
{
    RACDisposable * _lastTitleSig;
    RACDisposable * _lastSexSig;
}

-(void)bindModel:(YFRACTestModel *)model
{
// 解除 上一個model的 綁定
    [_lastTitleSig dispose];
    [_lastSexSig dispose];
    __weak typeof(self)weakS = self;
    RACDisposable * titleSig = [RACObserve(model, title) subscribeNext:^(NSString *x) {
        weakS.textLabel.text = x;
    }];
    
  RACDisposable * sexSig = [RACObserve(model, sex) subscribeNext:^(NSString *x) {
        weakS.detailTextLabel.text = x;
    }];
// 記錄 當前model的 綁定吵护,下一次綁定時,先解除綁定
    _lastTitleSig = titleSig;
    _lastSexSig = sexSig;
}
@end

重新運行我們的Demo,發(fā)現(xiàn)沒有問題了馅而,也達到了我們最初的想法祥诽,但是 感覺在cell 綁定數(shù)據(jù)時發(fā)生了太多的操作,RAC 的綁定和解除綁定也有一定的消耗CPU瓮恭,如果cell過于復(fù)雜綁定太多的屬性雄坪,對于cell的流暢性會有一定的影響,所以采用此方案時屯蹦,要慎重呀

致此 维哈,本文 結(jié)束,期待大家的評論互動登澜,如果幫到了你阔挠,請喜歡收藏下哦,下次見

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帖渠,一起剝皮案震驚了整個濱河市谒亦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌空郊,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件切揭,死亡現(xiàn)場離奇詭異狞甚,居然都是意外死亡,警方通過查閱死者的電腦和手機廓旬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門哼审,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人孕豹,你說我怎么就攤上這事涩盾。” “怎么了励背?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵春霍,是天一觀的道長。 經(jīng)常有香客問我叶眉,道長址儒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任衅疙,我火速辦了婚禮莲趣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘饱溢。我一直安慰自己喧伞,他們只是感情好,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著潘鲫,像睡著了一般绿聘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上次舌,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天熄攘,我揣著相機與錄音,去河邊找鬼彼念。 笑死挪圾,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的逐沙。 我是一名探鬼主播哲思,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吩案!你這毒婦竟也來了棚赔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤徘郭,失蹤者是張志新(化名)和其女友劉穎靠益,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體残揉,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡胧后,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了抱环。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壳快。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖镇草,靈堂內(nèi)的尸體忽然破棺而出眶痰,到底是詐尸還是另有隱情,我是刑警寧澤梯啤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布竖伯,位于F島的核電站,受9級特大地震影響条辟,放射性物質(zhì)發(fā)生泄漏黔夭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一羽嫡、第九天 我趴在偏房一處隱蔽的房頂上張望本姥。 院中可真熱鬧,春花似錦杭棵、人聲如沸婚惫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽先舷。三九已至艰管,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蒋川,已是汗流浹背牲芋。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捺球,地道東北人缸浦。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像氮兵,于是被迫代替她去往敵國和親诞吱。 傳聞我的和親對象是個殘疾皇子腥放,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 2017.02.22 可以練習谈喳,每當這個時候抑进,腦袋就犯困,我這腦袋真是神奇呀南片,一說讓你做事情掺涛,你就犯困,你可不要太...
    Carden閱讀 1,348評論 0 1
  • 原文鏈接:http://www.sprynthesis.com/2014/12/06/reactivecocoa-...
    陽仔dynamics閱讀 1,042評論 0 2
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫铃绒、插件鸽照、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,120評論 4 61
  • 此篇文章主要介紹了MVC和MVVM的區(qū)別和關(guān)系;同時闡述了有關(guān)函數(shù)式的概念颠悬;解釋了ReactiveCocoa的工作...
    MooGoo閱讀 785評論 0 3
  • 皮豆兒與其他狗狗并無不同,院長也不喜打扮它定血,狗狗就是狗狗吧赔癌,別弄得跟人似的。皮豆兒有個愛好澜沟,喜歡看電視灾票,喜歡不出門...
    君子包閱讀 203評論 2 4