在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/人工智能  HTML5  C/ iOS 中 MVVM 搭配 RAC 數(shù)據(jù)經(jīng)過(guò)操作更新后如何通知 TableVie

iOS 中 MVVM 搭配 RAC 數(shù)據(jù)經(jīng)過(guò)操作更新后如何通知 TableView 刷新?

一個(gè) TableView,上面 10條數(shù)據(jù),我想刪除某一行,然后刷新這一行,在 MVVM 下我有幾個(gè)問題想請(qǐng)教下大家:

1.刷新列表這個(gè)動(dòng)作,是不是該在控制器里做?
2.更新數(shù)據(jù),就是上面刪除點(diǎn)擊的那一行數(shù)據(jù),相關(guān)邏輯是不是該在 ViewModel 里面做?
3.TableView 的數(shù)據(jù)源是不是一般定義在 ViewModel 里面?

如果 1 2 3 都是的話,我在 ViewModel 里面處理完刪除數(shù)據(jù)的邏輯,更新好數(shù)據(jù)源后,怎么通知控制器刷新 TableView 呢?

我嘗試著監(jiān)聽 ViewModel 的數(shù)據(jù)源,在數(shù)據(jù)源被修改后,控制器可以收到 block 回調(diào),可以簡(jiǎn)單的調(diào)用 reloadData 刷新全部列表,有沒有其它辦法可以直接觸發(fā)控制器里某個(gè)回調(diào)直接刷新,而不是控制數(shù)據(jù)源來(lái)觸發(fā)回調(diào)刷新

- (void)viewDidLoad {
    [super viewDidLoad];
    
    @weakify(self);
    
    //按鈕 enabled 屬性綁定
    RAC(self.btnDismiss,enabled) = self.viewModel.validDismissSignal;
    
    [[[RACObserve(self.viewModel, authorizations) distinctUntilChanged] skip:1] subscribeNext:^(NSArray <RRAuthorization *> *authorizations) {
        @strongify(self);
        [self.tvAuthorization reloadData];
        NSLog(@"監(jiān)聽到了數(shù)據(jù)源有改變 %@",authorizations);
        
    }];
    
    [self.tvAuthorization registerNib:[UINib nibWithNibName:RRAuthorizationCellIdentifier bundle:nil] forCellReuseIdentifier:RRAuthorizationCellIdentifier];
    
}

希望對(duì) MVVM RAC 比較了解的朋友能夠指教下....

回答
編輯回答
乖乖噠

我們來(lái)數(shù)數(shù)把“數(shù)據(jù)變化”映射成“刷新列表”的幾種辦法:KVO、通知、代理、block、直接調(diào)用,是不是沒有你喜歡的。。。2333333

你完全可以不 kvo,而是嘗試著 block 回調(diào),當(dāng)你在 VC 里刪除一行數(shù)據(jù),調(diào)用 [self.vm deleteAtIndex:2],vm 內(nèi)部處理完數(shù)據(jù)之后再 completeLoadDataBlock 回調(diào)給 VC

2018年6月3日 15:04