iPhone navigationBar title Просмотреть проблему запроса синхронизации
Вот моя ситуация: я делаю синхронные HTTP-запросы для сбора данных, но перед этим я хочу разместить представление загрузки в представлении заголовка панели навигации. После завершения запроса я хочу вернуть titleView обратно в ноль.
[self showLoading]; //Create loading view and place in the titleView of the nav bar.
[self makeHTTPconnection]; //Creates the synchronous request
[self endLoading]; //returns the nav bar titleView back to nil.
Я знаю, что представление загрузки работает, потому что после завершения запроса отображается представление загрузки.
Моя проблема: это должно быть очевидно на данный момент, но в основном я хочу отложить [self makeHTTPconnection]
функционировать до [self showLoading]
завершено.
Спасибо за ваше время.
1 ответ
Вы не можете сделать это синхронно. Когда вы отправляете сообщение [self showLoading], пользовательский интерфейс не обновляется до тех пор, пока не завершится весь метод, поэтому он уже завершит две другие задачи (makeHTTPConnection и endLoading). В результате вы никогда не увидите окно загрузки.
Возможное решение для этой ситуации будет работать одновременно:
[self showLoading];
NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(_sendRequest) object:nil];
[queue addOperation:operation];
[operation release];
Затем вы должны добавить метод *_sendRequest*:
- (void)_sendRequest
{
[self makeHTTPConnection];
//[self endLoading];
[self performSelectorOnMainThread:@selector(endLoading) withObject:nil waitUntilDone:YES];
}