Ios 视图模型是否应该对视图控制器中的事件作出反应?
我已经实现MVVM范例一段时间了,同时在项目的某些部分采用了ReactiveCocoa。我有一个关于与视图相关的对象的生存期的简单问题Ios 视图模型是否应该对视图控制器中的事件作出反应?,ios,iphone,mvvm,reactive-cocoa,Ios,Iphone,Mvvm,Reactive Cocoa,我已经实现MVVM范例一段时间了,同时在项目的某些部分采用了ReactiveCocoa。我有一个关于与视图相关的对象的生存期的简单问题 想象一下,每当视图从屏幕上消失时,视图模型需要更新对象中的某些内容。该更新是否由视图控制器调用或者视图模型是否可以观察到,例如视图控制器中的视图将消失选择器并对其作出反应?这是一种不好的做法吗?您使用MVVM模式将视图(和视图控制器,在Cocoa中也被视为视图层的一部分)与模型分离。这意味着视图模型不应该知道有关视图控制器的任何信息 如中所述,理想情况下,您甚至
想象一下,每当
视图
从屏幕上消失时,视图
模型需要更新对象中的某些内容。该更新是否由视图控制器调用
或者视图
模型是否可以观察到,例如视图控制器
中的视图将消失选择器并对其作出反应?这是一种不好的做法吗?您使用MVVM模式将视图(和视图控制器,在Cocoa中也被视为视图层的一部分)与模型分离。这意味着视图模型不应该知道有关视图控制器的任何信息
如中所述,理想情况下,您甚至不应该在视图模型中导入UIKit
换句话说,视图模型应该可以重用,以便以不同的方式显示相同的数据:您可能希望在视图控制器和普通的UIView
子类中的其他地方显示数据(考虑在PersonTableViewCell
和点击单元格后显示的PersonDetailsViewController
中使用PersonViewModel
——我认为这是一种非常常见的情况)
如果您在视图模型中以某种方式观察到view将消失
,则它与UIViewController
子类紧密耦合,不能与UIView
子类一起使用
应通过以下方式在视图控制器中调用对视图模型的更新:
- (void)viewWillDisappear:(BOOL)animated
[super viewWillDisappear:animated];
[self.viewModel updateStuff];
}
使用MVVM模式是为了将视图(和视图控制器,在Cocoa中,它们也被视为视图层的一部分)与模型解耦。这意味着视图模型不应该知道关于视图控制器的任何信息 如中所述,理想情况下,您甚至不应该在视图模型中导入
UIKit
换句话说,视图模型应该可以重用,以便以不同的方式显示相同的数据:您可能希望在视图控制器和普通的UIView
子类中的其他地方显示数据(考虑在PersonTableViewCell
和点击单元格后显示的PersonDetailsViewController
中使用PersonViewModel
——我认为这是一种非常常见的情况)
如果您在视图模型中以某种方式观察到view将消失
,则它与UIViewController
子类紧密耦合,不能与UIView
子类一起使用
应通过以下方式在视图控制器中调用对视图模型的更新:
- (void)viewWillDisappear:(BOOL)animated
[super viewWillDisappear:animated];
[self.viewModel updateStuff];
}
嘿,这很有道理!谢谢你的回答和分享那篇文章,教会了我很多。嘿,这很有道理!谢谢你的回答和分享那篇文章,教会了我很多。