NSURLConnection threading проблема - PullRequest
       14

NSURLConnection threading проблема

0 голосов
/ 12 апреля 2011

У меня большая проблема, и мне нужна ваша помощь.Вот что мне нужно сделать:

  1. Пользователь выбирает строку из TableView
  2. Новый контроллер представления помещается в NavigationController и отображает только сообщение «Загрузка»
  3. Между тем некоторые данные читаются из файла XML (через http)
  4. Когда данные были прочитаны, NSUConnection используется для загрузки изображения из URL (этот URL является частью данных)
  5. Пока изображение все еще загружается, другие данные отображаются на экране
  6. Изображение загружено и отображается, завершая отображение вида

Большая проблема в том, что я не могу использовать detachNewThreadSelector и NSURLConnection вместе!

Так, как я могу обойти это?Как бы вы это сделали?

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 12 апреля 2011

Вы можете использовать следующий подход ... (если вы используете асинхронный запрос)

Когда ваше приложение входит в - (void)connectionDidFinishLoading:(NSURLConnection *)connection ... добавить объект NSInvocationOperation в NSOperationQueue (который вы можете обрабатывать на уровне приложения, синтезируя его в appDelegate) ..

создать NSInvocationOperation следующим образом .. (в connectionDidFinishLoading)

NSInvocationOperation *operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(parseIt) object:nil];

[appDelegate.operationQueue addOperation:operation];
[operation release];




-(void) parseIt
{
   //ask for parsing stuff....what you have earlier wrote directly in connectionDidFinishLoading
}

Спасибо,

0 голосов
/ 12 апреля 2011

Я бы использовал NSTimer для решения проблемы, используя detachNewThreadSelector и NSURLConnection вместе.

У меня есть похожий сценарий, в котором загружаемый Progress UIViewController показывает, пока файл не завершится, вот что я делаю:

  • Я рисую представление загрузки, например, содержит индикатор активности.
  • Я инициализирую NSTimer, чтобы постоянно проверять, завершен ли файл.
  • Я вызываю метод, который содержит Логику загрузки.

[1]

 -(void) vManageFileRequest
{       
  [self.oFilesManager vGetSingleFileRequest];

   NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self   selector:@selector(vValidateFileRequest) userInfo:nil repeats:NO]];
}

[2]

   [self performSelectorOnMainThread:@selector(vManageFileRequest) withObject:nil waitUntilDone:NO];
    ...