2015-12-15 64 views
0

我在一段時間內一直在實現MVVM範例,同時在項目的某些部分採用ReactiveCocoa。我有一個關於與視圖相關的對象的生命週期的簡單問題。視圖模型應該對View Controller中的事件做出反應嗎?

想象一下,只要View從屏幕上消失,View模型需要更新對象中的某些東西。如果這個更新被ViewController調用,或者View模型可以觀察viewWillDisappearViewController中的選擇器並對其作出反應?這會是一個不好的習慣嗎?

回答

1

您使用MVVM模式爲從模型中解耦視圖(並且視圖控制器,其在Cocoa中也被視爲視圖層的一部分)。這意味着視圖模型不應該對視圖控制器有任何瞭解。

this post所述,理想情況下,您甚至不應該在您的視圖模型中導入UIKit

換句話說,視圖模型應該用於顯示以不同的方式相同的數據是可重複使用:你可能想在一個視圖控制器來顯示數據UIView子類別的地方(想想有在PersonViewModelPersonTableViewCellPersonDetailsViewController這是一個單元格後顯示 - 我認爲這是一個非常普遍的情況)。

如果您在視圖模型中以某種方式觀察viewWillDisappear,則它緊密耦合到UIViewController的子類,並且不能與UIView子類一起使用。

更新視圖模型應在視圖控制器被稱爲在以下方式:

- (void)viewWillDisappear:(BOOL)animated 
    [super viewWillDisappear:animated]; 
    [self.viewModel updateStuff]; 
} 
+0

嘿,這非常有意義!謝謝你的回答,並分享那篇文章,教會了我很多。 – dccarmo

相關問題