1

我需要在后台线程中解析一个 json。此解析器还需要使用委托方法更新我的进度条,但由于某种原因,我的进度条只更新并结束了进程。我的代码如下:

-(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;
}

谁能解释我在这里做错了什么?

4

1 回答 1

0

在调用之前切换回主线程updateProgressBar。您可以使用 GCD 或performSelector这样做。

                [self.delegate performSelectorOnMainThread:@selector(updateProgressBar) withObject:nil waitUntilDone:NO];
于 2013-06-04T23:10:17.887 回答