В последнее время я расширяю свой кругозор и пытаюсь начать больше использовать KVO в своих программах.
В моем приложении для iPhone есть контроллер представления, который действует как источник данных и делегат для UITableView. У меня также есть одноэлементный контроллер модели, который координирует заполнение моей модели данными, полученными из Интернета.
В моем контроллере представления я запрашиваю, чтобы контроллер модели загружал новые данные из Интернета. Затем я могу наблюдать свойство «набора данных» синглтона и получать уведомления KVO, когда элементы добавляются или удаляются из набора.
Теперь, каждая ячейка в моем табличном представлении имеет индикатор, который указывает, было ли содержимое в этой ячейке прочитано или нет (например, синяя «непрочитанная» точка в почте). Как и в случае с почтой, когда выбрана строка, я буду отображать детали этой строки. В viewDidLoad для подробного представления я установил для свойства «read» объекта значение YES. Мне бы хотелось, чтобы оригинальный контроллер представления мог наблюдать это свойство «чтения» каждого объекта в наборе данных, чтобы можно было автоматически вызывать [tableView reloadData] и перерисовывать ячейки без синей точки.
Исследуя это, я нашел следующую ссылку: http://homepage.mac.com/mmalc/CocoaExamples/controllers.html#observingACollection
В соответствии с этим, похоже, я сделаю следующее:
1) быть наблюдателем массива
2) Всякий раз, когда я получаю уведомление об изменении массива, я добавляю (или удаляю) себя в качестве наблюдателя для отдельных свойств, которые меня интересуют.
3) Когда я получаю уведомление об изменении интересующего меня свойства, я могу вызвать [tableView reloadData]
В настоящее время я пытаюсь реализовать этот подход. Может ли кто-нибудь с опытом сделать это дать совет по этому подходу? Если это лучший способ справиться с такой ситуацией?
Если это правильный подход, желает ли кто-нибудь поделиться своей реализацией добавления / удаления наблюдателей для объектов в коллекции при изменении коллекции?
Спасибо!