Задержка выполнения кода после оператора UIAlertView show, пока не появится предупреждение - PullRequest
0 голосов
/ 22 июня 2011

Я пытаюсь создать UIAlertView «Пожалуйста, подождите», которое будет отображаться, когда мой код загружает и вычисляет некоторые данные, а затем исчезнет после его завершения.В частности, он анализирует XML-файл, который он получает от Geonames.org.

Предупреждение работает нормально, и перед моим кодом стоит оператор Show, за которым следует оператор dismiss.Моя проблема, однако, заключается в том, что экран тускнеет, как если бы он собирался показать предупреждение, анализирует и использует xml, затем появляется на долю секунды и закрывается, по существу делая предупреждение бесполезным!

Ниже приведенвыдержка из моего кода:

//Show Alert
UIAlertView *waitAlert = [[UIAlertView alloc] initWithTitle:@"Please Wait" 
                                                   message:@"Determining your current suburb."
                                         delegate:nil 
                                 cancelButtonTitle:nil 
                                 otherButtonTitles:nil];

[waitAlert show];

//Activity Indicator
UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
activityIndicator.center = CGPointMake(waitAlert.bounds.size.width / 2.0f,    waitAlert.bounds.size.height - 40.0f);
[activityIndicator startAnimating];
[waitAlert addSubview:activityIndicator];
[activityIndicator release];


//Reverse Geocode
//Parse xml
NSURL *apiUrl = [[NSURL alloc] initWithString:@"http://api.geonames.org/findNearbyPlaceName?lat=-34.032188&lng=151.084494&username=l_plater"];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:apiUrl];
[xmlParser setDelegate:self];
[xmlParser parse];


[xmlParser release];
[apiUrl release];

[waitAlert dismissWithClickedButtonIndex:0 animated:YES];
[waitAlert release];

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

Спасибо кучу заранее,любая помощь высоко ценится:)

1 Ответ

1 голос
/ 22 июня 2011

Это совершенно нормально.

NSXMLParser's initWithContentsOfURL загружает данные (по указанному URL) синхронно, поэтому загрузка данных XML выполняется блокирующим способом.

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

Вы должны отложить загрузку ваших XML-данных в отдельном потоке или гораздо более эффективно использовать NSURLConnection и его асинхронный механизм загрузки для загрузки ваших XML-данных. Таким образом, ваш основной поток продолжит работу без замораживания, и будет показан ваш UIAlertView.

Затем, после завершения загрузки в фоновом режиме, вы будете асинхронно проинформированы о загрузке данных XML с использованием методов делегата NSURLConnection. Это то место, где вы можете создать NSXMLParser, проанализировать данные, которые были асинхронно загружены, а затем завершить просмотр предупреждений.

...