#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 позволяет очень быстро и плавно обновлять данные, отображаемые в табличных представлениях.