使用ReactiveCocoa观察NSArray中的对象更改

时间:2016-03-13 19:26:43

标签: ios objective-c mvvm reactive-cocoa

我正在创建简单的联系应用程序,试图学习ReactiveCocoa和MVVM。 我在我的tableView的ViewModel中存储了单元格的ViewModel数组。当用户进入tableView的编辑模式时,可以在用户更改单元格文本时更改某些单元格的ViewModel的某些属性。我想观察这些更改,以启用/禁用完成按钮,并相应地启用/禁用信号以将数据保存到模型。 如何在tableViews视图模型中观察这些更改?

以下是我尝试使用的代码片段:

RACObserve

但只有在数组本身发生更改时才调用此{{1}},而不是数组元素。

2 个答案:

答案 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)

要观察类属性的更改,需要使用键值观察功能将观察者添加到该属性。