2013-06-04 59 views
1

我需要在後臺線程中解析json。此解析器還需要使用委託方法更新我的進度欄,但出於某種原因,我的進度條僅更新並且進程結束。我的代碼如下:IOS - 從異步調用更新進度欄

-(void)downloadStuff 
{ 
    // some other code 
    downloaderController.delegate = self; 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ 
     [downloaderController parseJson]; 
    }); 
} 

過程中的方法parseJson調用委託幾次更新進度條是這樣的:

-(void)updateProgressBar 
{ 
     //Is anyone listening 
     if([_delegate respondsToSelector:@selector(updateProgressBar)]) 
     { 
     [_delegate updateProgressBar]; 
     } 
} 

而且我updateProgressBar如下:

(void)updateProgressBar 
{ 
    _progressBar.progress =+ 0.05f; 
} 

任何人都可以解釋我在這裏做錯了什麼?

回答

0

在撥打updateProgressBar之前切換回主線程。您可以使用GCD或performSelector來執行此操作。

   [self.delegate performSelectorOnMainThread:@selector(updateProgressBar) withObject:nil waitUntilDone:NO]; 
+0

你能舉一個例子嗎?我不知道你在說什麼方法。 –

+0

完美。像魅力一樣工作。謝謝! –

+1

使用GCD的用戶'performSelectorOnMainThread'有點奇怪。將'dispatch_async'與'dispatch_get_main_queue'一起使用會更加一致。 – rmaddy