Отключить отображение предупреждений после ожидания завершения работы другого объекта. - PullRequest
1 голос
/ 23 августа 2011

У меня есть контроллер представления, назовем его HomeViewController, который отображает представление предупреждения без каких-либо кнопок с надписью «Пожалуйста, подождите при подключении к серверу».Во время ожидания контроллер представления вызывает метод из другого класса (ServerConnection), который отправляет данные на сервер.

Что мне нужно сделать, это отменить это предупреждение, как только я получу ответ от сервера, но оно не будет работать, если я сделаю следующее:

HomeViewController *hvc = [[HomeViewController alloc] init];
[hvc waitAlertCancel];

//note:waitAlertCancel is a method that calls the following line of code:
[waitAlert dismissWithClickedButtonIndex:0 animated:TRUE];

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

Ответы [ 2 ]

3 голосов
/ 23 августа 2011

Блоки потрясающие.


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

Создайте метод в вашем классе ServerConnection, который использует блоки для обратного вызова. Что-то вроде

- (void) connectWithCompletionBlock(void(^))completionBlock;

Тогда вы бы вызвали метод connectWithCompletionBlock: следующим образом:

[myServerConnection connectWithCompletionBlock: ^ { [waitAlert dismissWithClickedButtonIndex:0 animated:TRUE]; }];

Как только объект ServerConnection получает ответ от сервера, вы можете запустить блок завершения.

0 голосов
/ 23 августа 2011

Используйте NSNotification.Пусть объект, обрабатывающий запрос к серверу, отправит уведомление о его завершении.Сделайте так, чтобы ваш домашний контроллер просмотра выслушал его и ответил соответствующим образом.

...