2013-10-27 1 views
0

Я пытаюсь использовать некоторый объективный код c для загрузки изображения и некоторых текстовых данных на мой веб-сервер, которые все работают нормально. Я просто пытался добавить базовую индикацию прогресса «текстовое поле» на мой дисплей, чтобы показать прогресс т.е. сказать, «загрузку»object c synchronousrequest query

Я использую следующий код в кнопках IBAction пнуть аплоад

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 

Это фактически мешает мне обновить текстовое поле описания (или любой параметр экрана) до завершения загрузки (по характеру синхронного действия, я полагаю). Как я могу обновить некоторые параметры экрана до начала загрузки (но все еще внутри кнопок IBAction)?

ответ

1

sendSynchronousRequest есть, как следует из названия, синхронно и поэтому блоки текущая резьба. Поскольку все UI обновления выполняются только тогда, когда программа управления возвращает в основной цикл событий, вы должны переместить загрузку в отдельный поток, , например, так:

self.progressLabel.text = @"Uploading..."; 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{ 
     NSData *returnData = [NSURLConnection sendSynchronousRequest:...]; 

     // UI activity must be done on the main thread again: 
     dispatch_async(dispatch_get_main_queue(),^{ 
      self.progressLabel.text = @"Done."; 
     }); 
    }); 

В качестве альтернативы, вы можете использовать [NSURLConnection sendAsynchronousRequest:...].