iPhone navigationbar titleView Проблема запроса синхронизации
-
27-10-2019 - |
Вопрос
Вот моя ситуация: я делаю синхронные HTTP -запросы для сбора данных, но перед рукой я хочу разместить представление загрузки в заголовок навигационной панели. После того, как запрос закончился, я хочу вернуть TitleView обратно в NIL.
[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]
завершен.
Спасибо за время.
Решение
Вы не можете сделать это в синхронном подходе. Когда вы отправите самопостановка Сообщение, пользовательский интерфейс не будет обновлен до завершения всего метода, поэтому он уже выполнит две другие задачи (Makehttpconnection а также конечная загрузка) В результате вы никогда не увидите представление загрузки.
Возможное решение для этой ситуации будет работать одновременно:
[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];
}