Ios6 UIProgressView不更新

Ios6 UIProgressView不更新,ios6,xcode4.5,grand-central-dispatch,uiprogressview,Ios6,Xcode4.5,Grand Central Dispatch,Uiprogressview,如果有关系: -我用的是故事板 -核心数据 -代码4.6 我的应用程序有一个用于特定视图的UITableViewController。在这个视图中,如果用户单击一个按钮,软件将经历几个过程,从Internet API下载数据并保存到核心数据中。我相信这是一个资源消耗,这就是为什么我试图在单独的线程中完成这些进程 注: -有一个操作顺序,因为支腿依赖于交换。交换取决于种族和位置。位置取决于比赛。否则我会异步执行所有操作 问题: -这是我第一次在中央调度中心工作。我不确定我做得是否正确。 -如果我注

如果有关系: -我用的是故事板 -核心数据 -代码4.6

我的应用程序有一个用于特定视图的UITableViewController。在这个视图中,如果用户单击一个按钮,软件将经历几个过程,从Internet API下载数据并保存到核心数据中。我相信这是一个资源消耗,这就是为什么我试图在单独的线程中完成这些进程

注: -有一个操作顺序,因为支腿依赖于交换。交换取决于种族和位置。位置取决于比赛。否则我会异步执行所有操作

问题: -这是我第一次在中央调度中心工作。我不确定我做得是否正确。 -如果我注释掉数据处理,UIProgressView将可见并按预期更新。数据处理到位后,系统似乎陷入了困境,甚至无法显示UIProgressView

管理下载和进度的方法如下所示

}

  • (void)updateProgress:(双)完成百分比{ 如果(完成百分比==1.0){ [自我回家]; }如果([importExchanges count]>0),则为else{ [progressView setProgress:completedPercentage:YES]; } }

非常感谢您的帮助。

方法dispatch\u sync将阻止调用线程,我相信在您的情况下,它是主线程。因此,我认为最好将这些dispatch\u sync块包装成一个dispatch\u async块

例如:

- (void)updateProgress:(double)completedPercentage {
    if (completedPercentage == 1.0) {
        [self goHome];
    } else if ([importExchanges count] > 0) {
        dispatch_async(dispatch_get_main_queue(), ^{
            [progressView setProgress:completedPercentage animated:YES];
        });
    }
}
之后,您可以将progressView的更新包装到主线程中,因为它是一个UI更新


把那些dispatch\u sync块包装成一个dispatch\u async块,然后在主线程中执行updateProgress,因为它是UI更新,怎么样?我想你是对的。如果你把这个建议作为回答,我会认为它是正确的。非常感谢。
dispatch_async(backgroundQueue, ^(void){
    [self saveRace];
    [self updateProgress:0.2];

    [self savePositions];
    [self updateProgress:0.3];

    [self downloadExchanges];
    [self saveExchanges];
    [self updateProgress:0.4];

    [self downloadLegs];
    [self saveLegs];
    [self updateProgress:0.5];

    Utilities *utilities = [[Utilities alloc] init];
    [utilities calculateStartTimes:race with:managedObjectContext];
    [self updateProgress:1.0];
});
- (void)updateProgress:(double)completedPercentage {
    if (completedPercentage == 1.0) {
        [self goHome];
    } else if ([importExchanges count] > 0) {
        dispatch_async(dispatch_get_main_queue(), ^{
            [progressView setProgress:completedPercentage animated:YES];
        });
    }
}