2013-10-27 2 views
0

일부 객관적인 C 코드를 사용하여 이미지와 일부 텍스트 데이터를 모두 웹 서버에 업로드하려고합니다. 난 그냥 업로드objective c synchronousrequest query

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
에게 킥오프하는 버튼에 IBAction를 다음 코드를 사용하고 "업로드"

을 즉, 진행 상황을 보여 말을 내 디스플레이에 기본 진행 표시 "텍스트 상자"를 추가하려고했다

업로드가 끝날 때까지 (내가 생각하는 동기 동작의 특성에 따라) 텍스트 설명 상자 (또는 화면 매개 변수)를 업데이트 할 수 없게됩니다. 업로드 시작 전에 일부 화면 매개 변수를 어떻게 업데이트 할 수 있습니까? 버튼 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:...]를 사용할 수 있습니다.