Ios6 UIProgressView不更新
如果有关系: -我用的是故事板 -核心数据 -代码4.6 我的应用程序有一个用于特定视图的UITableViewController。在这个视图中,如果用户单击一个按钮,软件将经历几个过程,从Internet API下载数据并保存到核心数据中。我相信这是一个资源消耗,这就是为什么我试图在单独的线程中完成这些进程 注: -有一个操作顺序,因为支腿依赖于交换。交换取决于种族和位置。位置取决于比赛。否则我会异步执行所有操作 问题: -这是我第一次在中央调度中心工作。我不确定我做得是否正确。 -如果我注释掉数据处理,UIProgressView将可见并按预期更新。数据处理到位后,系统似乎陷入了困境,甚至无法显示UIProgressView 管理下载和进度的方法如下所示 }Ios6 UIProgressView不更新,ios6,xcode4.5,grand-central-dispatch,uiprogressview,Ios6,Xcode4.5,Grand Central Dispatch,Uiprogressview,如果有关系: -我用的是故事板 -核心数据 -代码4.6 我的应用程序有一个用于特定视图的UITableViewController。在这个视图中,如果用户单击一个按钮,软件将经历几个过程,从Internet API下载数据并保存到核心数据中。我相信这是一个资源消耗,这就是为什么我试图在单独的线程中完成这些进程 注: -有一个操作顺序,因为支腿依赖于交换。交换取决于种族和位置。位置取决于比赛。否则我会异步执行所有操作 问题: -这是我第一次在中央调度中心工作。我不确定我做得是否正确。 -如果我注
- (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];
});
}
}