Update view in middle of thread?

Discussion in 'iOS Programming' started by Jeremy082983, Dec 27, 2008.

  1. macrumors newbie

    Joined:
    Dec 27, 2008
    #1
    I have a calculation that can take a while sometimes depending on user input. Sometimes it's instant and sometimes it takes several minutes. I've already implemented a cancel button if the user doesn't want to wait. I'd also like to have a progress bar to display how much longer it will take. I can calculate the progress bar value easily, but I am having trouble with getting it to update.

    I've tried using:

    [self.view setNeedsDisplay];

    and

    CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, YES);

    but neither seem to be working for me. I've tried running the calculation loop in the background and using:

    [self performSelectorOnMainThread:mad:selector(progressUpdate) withObject:f waitUntilDone:YES];

    where progressUpdate is a new method that accepts "f" as an argument to update the UIProgressView.

    Does anyone know what the best way to update a progress bar is while the loop that is calculating it is still running? The above things that I tried were suggestions I saw in other threads for similar problems.

    Thanks.

    EDIT -

    I have this working now. I used [NSThread detachNewThreadSelector: ... ]; to start the loop for the calculation. This loop also calculates the value for the progress indicator and stores it in a variable defined in the header file.
    Then I used another [NSThread detachNewThreadSelector: ... ]; to run a loop on a [self performSelectorOnMainThread: ...]; that set the value of the progress indicator.

    It did not work if I updated the progress value in the new thread without calling performSelectorOnMainThread.
    It did not work if I moved the performSelectorOnMainThread to the loop for the calculation and commented out the detachNewThreadSelector for the progress thread.

    This will work for now, but if anyone know of a better way, please let me know. Also, I don't like running the calculation loop in a new thread as it severely slows down the calculation. This is just with testing on the simulator. I have yet to see what it looks like on the device.

    Thanks.
     

Share This Page