Search code examples
iosmultithreadinguiprogressbar

updating UIProgressBar progress during loop


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?


Solution

  • 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];
    });