Pergunta

Abaixo está um bloco de código que é executado em um segmento separado do meu aplicativo é thread principal. Como faço para obter a interface do usuário para atualização após cada botão fica sua miniatura? Agora ele não é actualizado até que todo o método termina. Os botões já são adicionados a um UIScrollView.

(LotsGridButton é apenas um UIButton com algumas propriedades adicionais.)

- (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];
}
Foi útil?

Solução

No lugar de setImage:forState:, dê uma olhada no método performSelectorOnMainThread:, por exemplo:.

[myButton performSelectorOnMainThread:@selector(setThumbnail:) withObject:[server imageWithPath:myButton.lot.thumbnailURL] waitUntilDone:NO];

Outras dicas

Eu não tenho nenhuma experiência com o iPhone, mas em Cocoa, em geral, você deveria atualizar a interface do usuário somente a partir do thread principal.

A partir de um segmento diferente você pode executar código no thread principal usando de NSObject:

performSelectorOnMainThread:withObject:waitUntilDone:
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top