2011-01-29 3 views
0

Вот моя ситуация: Я делаю синхронные HTTP-запросы для сбора данных, но перед тем, как делать это, я хочу разместить просмотр загрузки в виде заголовка панели навигации. По завершении запроса я хочу вернуть titleView обратно в нуль.iPhone navigationBar 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

Вы не можете сделать это синхронно. Когда Вы пришлете [само] 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]; 
}