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];
}
Другие вопросы по тегам