Обновление пользовательского интерфейса при использовании последовательной очереди - PullRequest
2 голосов
/ 06 декабря 2010

Я использую последовательную очередь для выполнения фонового потока (блока) для обработки видео. Я хочу обновить компонент пользовательского интерфейса (в частности, индикатор выполнения). Я обнаружил, что хотя я могу взаимодействовать с пользовательским интерфейсом, мой индикатор выполнения не обновляется вызовами setProgress (вызываемыми из блока), пока поток не завершится.

dispatch_queue_t dispatch_queue = dispatch_queue_create("somequeue", NULL);

    [somebody doSomethingOnQueue:dispatch_queue usingBlock:^{

        progressBar.progress = someFloat; //does not update

    }];

Ответы [ 2 ]

9 голосов
/ 06 декабря 2010

Вы должны обновить пользовательский интерфейс в основной очереди отправки:

[somebody doSomethingOnQueue:dispatch_queue usingBlock:^{
    …
    dispatch_async(dispatch_get_main_queue(), ^{
        progressBar.progress = someFloat;
    });
}];
2 голосов
/ 06 декабря 2010

Вы можете использовать performSelectorOnMainThread:withObject:waitUntilDone:.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...