Наблюдайте изменение объекта в NSArray с помощью ReactiveCocoa

Я создаю простое контактное приложение, пытающееся изучить ReactiveCocoa и MVVM. Я храню массив ViewModels ячейки в моей ViewModel таблицы TableView. Когда пользователь входит в режим редактирования tableView, некоторые свойства ViewModel некоторых ячеек могут быть изменены, когда пользователь меняет текст ячейки. Я хочу наблюдать эти изменения, чтобы включить / отключить кнопку «Готово» и, соответственно, включить / отключить сигнал для сохранения данных в модели. Как я могу наблюдать эти изменения в модели представления tableViews?

Вот фрагмент кода, который я пытался использовать:

-(RACSignal *)executeCheckChange { return [RACObserve(self, cellViewModels) map:^id(NSArray *viewModels) { for (id viewModel in viewModels) { if([viewModel isKindOfClass:[STContactDetailsPhoneCellViewModel class]]) { STContactDetailsPhoneCellViewModel *phoneViewModel = (STContactDetailsPhoneCellViewModel *)viewModel; if([phoneViewModel isChanged]) return @(YES); } } return @(NO); }]; } 

Но этот RACObserve вызывается только при изменении массива, но не в элементе массива.

В моем конкретном случае я смог решить проблему следующим образом:

 -(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]; } 

В общем, каждый раз, когда меняет массив, я создаю набор наблюдений на каждой из ViewModels, фильтрую их таким образом, чтобы наблюдать только те, которые мне интересны, сравнивать значения от наблюдений до исходного значения и обеспечивать, чтобы только самые новые сигнал вступает в силу.

Чтобы наблюдать за изменениями свойств класса, вам необходимо добавить наблюдателя в это свойство, используя функциональные возможности наблюдения за ключом.

  • Связывание UICollectionView в Xamarin.iOS с подсветкой Mvvm
  • ReactiveCocoa, объединить два сигнала с включенной кнопкой
  • iOS: Как передать модель из модели представления для просмотра модели с использованием MVVM?
  • ReactiveCocoa с MVVM
  • Условная инъекция ViewModel в ViewController с использованием Swinject
  • Координаторы MVVM и появление UIViewController
  • MVVM с ReactiveCocoa, как ViewModel сообщает «Вид» для выполнения одной операции?
  • Interesting Posts

    UIImageView не перерисовывается, когда изображение установлено на ноль

    Как указать цвет текста, переданного в PDF в iOS?

    Отправка SMS-сообщения через частные фреймворки / API

    Проблемы с VoIP и Callkit

    Как я могу получить API Google Maps?

    «Незаконные данные base64 на входном байте 20» в ответ от сервера

    Добавить строку запроса в локальные HTML-файлы

    XCode говорит, что метод не переопределяет какой-либо метод в суперклассе для метода editActionsForRowAtIndexPath

    Занимайте GPS-ресурс на iOS (используя Geolocation Class, Adobe AIR)

    iOS – рисовать текст в виде таблицы в формате PDF

    подкласс PFObject и переопределить init

    Включить вывод битового кода в Cargo Build для целей iOS?

    (неатомные, readwrite, сохраняются) и (неатомные, сильные) в Objective-C ARC

    Пользовательская ячейка UITableview на основе элемента данных

    Являются ли фоновые приложения iOS, которые используют * стандартные * службы определения местоположения, перезагруженные при перезагрузке устройства?

    Давайте будем гением компьютера.