我一直在实施MVVM范例,而在项目的某些部分采用ReactiveCocoa。我有一个关于与视图相关的对象的生命周期的简单问题。
想象一下,只要View
从屏幕上消失,View
模型就需要更新对象中的某些内容。如果ViewController
调用此更新,或View
模型是否可以观察ViewController
中的 viewWillDisappear 选择器并对其作出反应?这会是一种不好的做法吗?
答案 0 :(得分:4)
您使用MVVM模式来从模型中解耦视图(以及视图控制器,其中Cocoa中的控制器也被视为View层的一部分)。这意味着视图模型不应该知道有关视图控制器的任何信息。
正如this post中所述,理想情况下,您甚至不应在视图模型中导入UIKit
。
换句话说,视图模型应该可以重复使用,以不同的方式显示相同的数据:您可能希望在视图控制器中显示数据和在某处的普通UIView
子类其他(考虑在PersonViewModel
和PersonTableViewCell
中点击一个单元格后显示PersonDetailsViewController
- 我认为这是非常常见的情况。)
如果您以某种方式观察视图模型中的viewWillDisappear
,它会与UIViewController
子类紧密耦合,并且不能与UIView
子类一起使用。
应该在视图控制器中以下列方式调用视图模型的更新:
- (void)viewWillDisappear:(BOOL)animated
[super viewWillDisappear:animated];
[self.viewModel updateStuff];
}