视图模型应该对View Controller中的事件做出反应吗?

时间:2015-12-15 11:59:22

标签: ios iphone mvvm reactive-cocoa

我一直在实施MVVM范例,而在项目的某些部分采用ReactiveCocoa。我有一个关于与视图相关的对象的生命周期的简单问题。

想象一下,只要View从屏幕上消失,View模型就需要更新对象中的某些内容。如果ViewController调用此更新,或View模型是否可以观察ViewController中的 viewWillDisappear 选择器并对其作出反应?这会是一种不好的做法吗?

1 个答案:

答案 0 :(得分:4)

您使用MVVM模式来从模型中解耦视图(以及视图控制器,其中Cocoa中的控制器也被视为View层的一部分)。这意味着视图模型不应该知道有关视图控制器的任何信息。

正如this post中所述,理想情况下,您甚至不应在视图模型中导入UIKit

换句话说,视图模型应该可以重复使用,以不同的方式显示相同的数据:您可能希望在视图控制器中显示数据在某处的普通UIView子类其他(考虑在PersonViewModelPersonTableViewCell中点击一个单元格后显示PersonDetailsViewController - 我认为这是非常常见的情况。)

如果您以某种方式观察视图模型中的viewWillDisappear,它会与UIViewController子类紧密耦合,并且不能与UIView子类一起使用。

应该在视图控制器中以下列方式调用视图模型的更新:

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