我需要在后台线程中解析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;
}
有谁能解释一下我在这里做错了什么?
答案 0 :(得分:0)
在致电updateProgressBar
之前切换回主线程。您可以使用GCD或performSelector
来执行此操作。
[self.delegate performSelectorOnMainThread:@selector(updateProgressBar) withObject:nil waitUntilDone:NO];