События запуска по нескольким контроллерам вида из потока в приложении applelegate - PullRequest
3 голосов
/ 26 апреля 2011

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

Я хочу:

  • переместить создание потока в приложение Delegate - просто!
  • запускайте его периодически и каким-то образом сообщайте подконтрольным контроллерам (5 - 10), загружается ли новая информация
  • имеют возможность вручную выполнить поток вне планировщика

Я могу запустить метод на appdelegate с помощью executeSelectorOnMainThread, но как мне заставить мои дочерние контроллеры представления «подписаться» на метод на appdelegate?

Ответы [ 3 ]

3 голосов
/ 26 апреля 2011

Вот что вы делаете:

Из класса, отправляющего сообщение, отправьте уведомление, например:

[[NSNotificationCenter defaultCenter] postNotificationName: @"YOUR_NOTIFICATION_NAME" object: anyobjectyouwanttosendalong(can be nil)];

В контроллерах представления, где вы хотите получать уведомления об уведомлении при публикации:

В viewDidLoad сделать:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(METHOD_YOU_WANT_TO_INVOKE_ON_NOTIFICATION_RECEIVED) name:@"YOUR_NOTIFICATION_NAME" object:sameasbefore/nil];

Внимание! Не забывайте это в вашем viewDidUnload ():

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"YOUR_NOTIFICATION_NAME" object:sameasbefore/nil];

Я не очень уверен насчет объекта, связанного с уведомлениями, но вы можете посмотреть это здесь

ПРИМЕЧАНИЕ. Когда только один объект уведомляет другой, лучше использовать протоколы :) Но в этом случае, поскольку прослушиваются несколько контроллеров представления, используйте уведомления

3 голосов
/ 26 апреля 2011

Используя NSNotificationCenter, вы можете хорошо публиковать уведомления: D Таким образом, без добавления appDelegate других классов другие классы могут «подписаться» на уведомления, которые им нужны.

Кроме того, я бы сохранил поток живым,порождение нового потока каждый раз является дорогостоящим делом, только если оно порождается часто.Я бы порекомендовал использовать GCD (iOS 4+)

1 голос
/ 26 апреля 2011

Использовать NSNotificationCenter для отправки событий, которые наблюдают ваши контроллеры представления?

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