NSURLConnection Асинхронный запрос и отображение представления или подпредставления «Загрузка» во время выполнения запроса - PullRequest
0 голосов
/ 29 ноября 2011

Я пытаюсь выяснить оптимальный способ выполнения NSURLConnection асинхронного запроса и экранировать пользовательский интерфейс с отображением предупреждений во время выполнения запроса. У меня было много проблем, чтобы заставить его работать с синхронным запросом, потому что я не мог понять, как эффективно использовать функции многопоточности или очереди операций с синхронным запросом, поэтому я считаю, что это лучший способ. Псевдокод или реальный код в порядке, мне просто нужно знать, в каком направлении идти. Пока что я понимаю:

  • Создать UIAlertView свойство
  • Создайте функцию void, которая инициирует NSURLConnection, и отобразите представление сразу после того, как оно
  • Используйте метод делегата, чтобы закрыть окно AlertView -(void)connectionDidFinishLoading или что-то в этом роде.

Это так просто, или я что-то упустил?

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

Вероятно, самый простой способ сделать это - использовать свойство UIApplication.networkActivityIndicatorVisible и выполнить запрос синхронизации в фоновом потоке.

-(void)loadURLInBackground:(NSURL*)url {

    NSURLRequest* req = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];

    NSURLResponse* response = nil;
    NSError* err = nil;

    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;


    NSData* data = [NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&err];

    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

    if( data != nil ) { 
        [self performSelectorOnMainThread:@selector(processData:) withObject:data waitUntilDone:NO];
     } else {
        [self performSelectorOnMainThread:@selector(processError:) withObject:err waitUntilDone:NO];
     }
}

Использовать [self performSelectorInBackground:@selector(loadURLInBackground:) withObject:url]; для вызова метода, а затем просто реализоватьprocessData: и processError:.

0 голосов
/ 29 ноября 2011

Вы не хотите использовать UIAlertView - это модальное диалоговое окно.

Вы хотите использовать что-то вроде UIActivityIndicatorView, чтобы показать счетчик во время фоновой активности.

Тогда, как вы говорите, ваш метод делегата может прекратить анимацию представления индикатора активности.

Если вы хотите показать сообщение типа «Загрузка ...», то вы можете заключить индикатор активности в другое представление, отобразить это представление и удалить его, когда делегат перезвонит.

...