Как мне обновить пользовательский интерфейс в середине этой темы? - PullRequest
3 голосов
/ 30 апреля 2009

Ниже приведен блок кода, который выполняется в отдельном потоке от основного потока моего приложения. Как заставить пользовательский интерфейс обновляться после того, как каждая кнопка получает свой эскиз? Сейчас он не обновляется, пока не завершится весь метод. Кнопки уже добавлены в UIScrollView.

(LotsGridButton - просто UIButton с некоторыми дополнительными свойствами.)

- (void)fetchThumbnails {
    CCServer* server = [[CCServer alloc] init];
    for (int i=0; i<[buttons count]; i++) {
        LotsGridButton* button = [buttons objectAtIndex:i];     
        if (button.lot.thumbnail) continue;
        // load the thumbnail image from the server
        button.lot.thumbnail = [server imageWithPath:button.lot.thumbnailURL];
        [button setImage:button.lot.thumbnail forState:UIControlStateNormal];
    }
    [server release];
}

Ответы [ 2 ]

5 голосов
/ 30 апреля 2009

Вместо setImage:forState: взгляните на метод performSelectorOnMainThread:, например ::

[myButton performSelectorOnMainThread:@selector(setThumbnail:) withObject:[server imageWithPath:myButton.lot.thumbnailURL] waitUntilDone:NO];
3 голосов
/ 30 апреля 2009

У меня нет опыта работы с iPhone, но в целом в Какао вы должны обновлять интерфейс только из основного потока.

Из другого потока вы можете выполнить код в основном потоке, используя NSObject's:

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