Использование KVO для перезагрузки данных в UITableView

#iphone #ios #uitableview #key-value-observing

#iPhone #iOS #uitableview #наблюдение за ключом-значением

Вопрос:

В последнее время я расширяю свои горизонты и пытаюсь начать больше использовать KVO в своем программировании.

В моем приложении для iPhone есть контроллер представления, который выступает в качестве источника данных и делегата для UITableView. У меня также есть контроллер одноэлементной модели, который координирует заполнение моей модели данными, полученными из Интернета.

В моем контроллере представления я запрашиваю, чтобы контроллер модели загружал новые данные из Интернета. Затем я могу наблюдать свойство «dataset» синглтона и получать уведомления KVO, когда элементы добавляются в набор или удаляются из него.

Теперь каждая ячейка в моем табличном представлении имеет индикатор, который указывает, было ли прочитано содержимое в этой ячейке или нет (например, синяя «непрочитанная» точка в mail). Как и в mail, при выборе строки я буду отображать сведения об этой строке. В viewDidLoad для подробного просмотра я установил для свойства объекта «чтение» значение YES. Я бы хотел, чтобы исходный контроллер представления мог наблюдать это свойство «чтения» каждого объекта в наборе данных, чтобы при необходимости можно было автоматически вызывать [TableView reloadData] и перерисовывать ячейки без синей точки.

Исследуя это, я нашел следующую ссылку: http://homepage.mac.com/mmalc/CocoaExamples/controllers.html#observingACollection

В соответствии с этим, похоже, я буду делать следующее:
1) Быть наблюдателем массива
2) Всякий раз, когда я получаю уведомление об изменении массива, я добавляю (или удаляю) себя в качестве наблюдателя для отдельных интересующих меня свойств.
3) Когда я получаю уведомление об изменении интересующего меня свойства, я могу вызвать [TableView reloadData]

В настоящее время я пытаюсь реализовать этот подход. Может ли кто-нибудь, имеющий опыт в этом, дать несколько советов по этому подходу? Если это лучший способ справиться с подобной ситуацией?

Если это правильный подход, кто-нибудь захочет поделиться своей реализацией добавления / удаления наблюдателей для объектов в коллекции при изменении коллекции?

Спасибо!

Комментарии:

1. Похоже, вы на правильном пути. Главное, что нужно понять, это то, что наблюдение за коллекцией — это не то же самое, что наблюдение за всеми элементами в этой коллекции, и, похоже, вы это уже поняли. В наблюдении за массивом вам нужно начать наблюдать за тем, что было добавлено в массив, и прекратить наблюдать за тем, что было удалено. Вот почему важно следить за коллекцией, а также за содержимым.

Ответ №1:

Я думаю, вы можете выполнить эту задачу, используя Core Data и контроллер полученных результатов. Я уверен, что это может сэкономить вам много работы. Вот хорошее руководство: Ray Wenderlich Core Data Tutorial, начало работы

Комментарии:

1. Я не использовал Core Data в своем первоначальном примере, но когда это так, контроллеры извлеченных результатов могут оказать большую помощь. Спасибо за сообщение

2. Это руководство потрясающее! Использование NSFetchedResultsController позволяет очень быстро и плавно обновлять данные, отображаемые в табличных представлениях.