问题
I can't find a clear answer on how to update the progress of a UIProgressbar whilst iterating a loop e.g. :
for (int i=0;i<items.count;i++) {
Object *new = [Object new];
new.xxx = @"";
new...
...
float progress = (i+1) / (float)items.count;
progressBar.progress = progress;
}
[self save];
how can I update the UI on a seperate thread?
回答1:
Run the loop on a background thread, and update the progress bar on the main thread:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
for (int i=0;i<items.count;i++) {
Object *new = [Object new];
new.xxx = @"";
new...
...
float progress = (i+1) / (float)items.count;
dispatch_async(dispatch_get_main_queue(), ^{
progressBar.progress = progress;
});
}
[self save];
});
来源:https://stackoverflow.com/questions/24701643/updating-uiprogressbar-progress-during-loop