Отображение оповещения при вызове веб-службы - PullRequest
2 голосов
/ 09 марта 2011

У меня есть следующий код.

UIActivityIndicator *activity = [[UIActivityIndicator alloc] initWithActivityIndicatorStyle:
                                                    UIActivityIndicatorStyleWhite];


UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Processing" delegate:self otherButtonTitles:nil];
   [alert addSubview:activity];    
   [activity startAnimating];    
   [alert show];

WebServiceController *web = [[WebServiceController alloc]init];

NSDictionary *dict = [web getDetails];

Проблема в том, что предупреждение не отображается.WebServiceController - это синтаксический анализатор XML, который получает сведения по указанному URL-адресу и возвращает их.Предупреждение должно отображаться во время вызова службы, поскольку для получения подробной информации требуется время.Но он отображает предупреждение только после завершения сервисного вызова.Почему это так?

Ответы [ 2 ]

3 голосов
/ 09 марта 2011

, поскольку [alert show] потребует анимации, поскольку вызов контроллера службы выполняется в главном потоке, основной поток занят выполнением вызова службы, блокируя выполнение анимации представления предупреждений.

Вам необходимо выполнить ServiceCall в бэкэнд-потоке, см. NSOperation или PerformSelectorOnBackgroundThread, убедитесь, что вы передали делегат ViewController, имеющий AlertView, в бэкэнд-поток, выполните обратный вызов делегата, как только вызов службы завершится. Убедитесь, что вы выполняете вызов для обратного вызова в mainthread, используя executeSelectorOnMainThread. Все связанные с пользовательским интерфейсом вызовы должны выполняться в главном потоке.

1 голос
/ 09 марта 2011

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

UIActivityIndicator *activity = [[UIActivityIndicator alloc] initWithActivityIndicatorStyle:
                                                    UIActivityIndicatorStyleWhite];


UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Processing" delegate:self otherButtonTitles:nil];
   [alert addSubview:activity];    
   [activity startAnimating];    
   [alert show];

[self performSelectorInBackground:@selector(doTheWork) object:nil];

Вам необходимо объявить функцию (doTheWork), которая позаботится о вызове веб-службы, следующим образом:

-(void)doTheWork {

WebServiceController *web = [[WebServiceController alloc]init];

NSDictionary *dict = [web getDetails];

[alert dismissWithClickedButtonIndex:0 animated:YES]; //dismissing the alert

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