уровень модели iOS, уведомляющий объект контроллера


Https://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html

По ссылке выше я вижу следующее в отношении того, как слой модели должен взаимодействовать с ViewController.

" при изменении объекта модели (например, при получении новых данных по сетевому соединению) он уведомляет объект контроллера, который обновляет соответствующие объекты представления."

Мой вопрос заключается в том, как объект модели уведомляет Объект контроллера? какими различными способами это можно сделать? Мой слой модели получает местоположение пользователя, а затем вызывает веб-службу. Как я должен уведомить объект контроллера, когда эти данные загружены?

Спасибо

1   5   2012-07-22 00:30:07

1 ответ:

Есть несколько способов сделать это, в зависимости от вашего конкретного случая. Обычно вы используете реализацию протокола / делегата, наблюдение за значением ключа или уведомления. Здесь есть довольно хороший обзор .

Редактировать:

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

Если вам гарантированно нужен только один наблюдатель за раз: я обычно использую блоки или делегаты. Мое личное предпочтение заключается в том, что я использую блоки, если есть только один или два обратного вызова, потому что именно здесь они светятся, но я использую протоколы делегирования, если существует больше, чем несколько возможных методов.

Если вам может понадобиться несколько наблюдателей, я использую уведомления через NSNotificationCenter.

Я использую Key-Value-Observing, когда мне нужно только наблюдать определенные свойства на например, вместо событий.