Как Модель общается с View Controller? - PullRequest
0 голосов
/ 22 июля 2010

Вот кое-что, что я просто не могу заставить работать .... Я могу заставить контроллер представления нормально общаться с моими пользовательскими объектами .... но как я могу отправлять сообщения в View Controller из моих объектов? 1001 *

Сообщение от myViewController к myObject будет выглядеть [myObject doSomething].

Как бы выглядело противоположное сообщение? Есть ли смысл отправлять сообщения другим способом?

Очень ценю вашу помощь!

Ответы [ 3 ]

5 голосов
/ 22 июля 2010

Вы можете передать контроллер модели, но часто вы хотите, чтобы модели не зависели от представлений или контроллеров.

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

3 голосов
/ 22 июля 2010

Я часто использую NSNotificationCenter для трансляции обновлений от объектов модели заинтересованным контроллерам. Для более тесно связанного взаимодействия рассмотрите возможность создания протокола делегата для модельного объекта.

Уведомление в основном одностороннее, хотя слушатель может получить доступ к объекту модели, который отправил уведомление. Заинтересованных сторон может быть любое количество, в том числе нет, если контроллеры приходят и уходят, но модель постоянна.

Делегат является двухсторонним, но одновременно может быть только один делегат. Обычно ожидается, что делегат переживет объект, которому он делегат. Делегат может быть полезен для фазы жизненного цикла объекта модели, которая требует дополнительного пользовательского ввода.

Уведомления и делегаты могут использоваться одновременно. Как и в случае UIApplication, делегат обычно вызывается перед отправкой уведомления.

2 голосов
/ 22 июля 2010

Почему вы хотите, чтобы ваша модель активно говорила с чем-либо?Контроллеры представления являются активными менеджерами потока приложений и инициируют связь с моделью, а не наоборот.

Можете ли вы привести более конкретный пример ситуации, когда вам действительно нужно это сделать?

Как вы сами подозреваете, в большинстве случаев не имеет смысла отправлять сообщения «в другую сторону». Но если вам действительно нужно это сделать, подходящий способ транслировать информацию «из» моделейis уведомлений. Вы можете настроить отправку уведомлений вашей модели, а контроллеры представления или любые другие объекты могут подписаться на эти уведомления, если они заботятся, но нет тесной связи между моделью и другими частями приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...