我正在创建简单的联系应用程序,试图学习ReactiveCocoa和MVVM。 我在我的tableView的ViewModel中存储了单元格的ViewModel数组。当用户进入tableView的编辑模式时,可以在用户更改单元格文本时更改某些单元格的ViewModel的某些属性。我想观察这些更改,以启用/禁用完成按钮,并相应地启用/禁用信号以将数据保存到模型。 如何在tableViews视图模型中观察这些更改?
以下是我尝试使用的代码片段:
RACObserve
但只有在数组本身发生更改时才调用此{{1}},而不是数组元素。
答案 0 :(得分:3)
在我的特定情况下,我能够以这种方式解决问题:
-(RACSignal *)executeChangeCheck {
@weakify(self);
return [[RACObserve(self, cellViewModels)
map:^(NSArray *viewModels) {
RACSequence *selectionSignals = [[viewModels.rac_sequence
filter:^BOOL(id value) {
return [value isKindOfClass:[STContactDetailsPhoneCellViewModel class]];
}]
map:^(STContactDetailsPhoneCellViewModel *viewModel) {
@strongify(self);
return [RACObserve(viewModel, editPhone)
map:^id(NSString *editPhone) {
return @(![editPhone isEqualToString:viewModel.phone]);
}];
}];
return [[RACSignal
combineLatest:selectionSignals]
or];
}]
switchToLatest];
}
总而言之,每次我的数组发生变化时,我都会在每个ViewModel上创建一组观察,以这样的方式过滤它们,我只观察我感兴趣的那些,将观察值与原始值进行比较并确保只有最新的信号生效。
答案 1 :(得分:0)
要观察类属性的更改,需要使用键值观察功能将观察者添加到该属性。