2013-10-27 49 views
0

我想使用一些客觀的c代碼上傳圖像和一些文本數據到我的網絡服務器,這一切工作正常。我只是想一個基本的進度指示「文本框中輸入」添加到我的顯示器顯示進度即說「上傳」客觀c同步請求查詢

我使用下面的代碼在一個按鈕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:...]