2013-06-04 26 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