куда мы должны отправить уведомление для обновления многих просмотров? - PullRequest
1 голос
/ 21 мая 2010

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

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

Проблема заключается в том, чтобы определить, куда я должен отправлять Уведомление о «завершающей задаче» в диспетчере моделей или в контроллере представления, который обрабатывает событие и получает обратный вызов от диспетчера моделей? Какой дизайн лучше? Должна ли модель заботиться об отправке этой «обычной» задачи, или должен контроллер представления?

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

Спасибо

Ответы [ 3 ]

2 голосов
/ 21 мая 2010

Из вашего описания похоже, что модель знает, когда задача завершена, поэтому модель должна отвечать за генерацию этого уведомления.

Проблема заключается в том, чтобы определить, куда следует отправлять Уведомление о «завершении задачи» в диспетчере моделей или в контроллере представления, который обрабатывает событие и получает обратный вызов от диспетчера моделей

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

Вот один из возможных рабочих процессов:

При запуске приложения:

1. View Controller 1 subscribes to "onTaskFinished" message at NotificationCenter
2. View Controller 2 subscribes to "onTaskFinished" message at NotificationCenter
3. User presses "Perform Task" button in some view controller
4. Model Manager gets triggered and performs the task
5. Model Manager publishes "onTaskFinished" message to NotificationCenter

View Controller - плохой выбор для отправки этого сообщения, так как оно объединяет контроллеры представления, и правильное функционирование вашего приложения зависит от правильного функционирования этого контроллера представления.

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

0 голосов
/ 21 мая 2010

Вы можете отправить уведомление экземпляру NSNotificationCenter, например так:

// after completing the task 
[[NSNotificationCenter defaultCenter] postNotificationName:@"noteName" object:self userInfo:optionalDic];

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

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(someName:) name:@"noteName" object:notification sender];

Метод someName: вашего объекта затем вызывается с экземпляром NSNotification в качестве аргумента при публикации уведомления.

0 голосов
/ 21 мая 2010

Посмотрите основные данные для начинающих.

В противном случае: После того, как менеджер модели выполнит свою задачу, вызовите контроллер представления [view setNeedsDisplay]. Это заставит все ваши представления / таблицы и т. Д. Перерисовываться самостоятельно, и в процессе они должны извлечь свою информацию из модели данных и отобразить ее текущее содержимое.

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