Como faço para atualizar a interface do usuário no meio desta discussão?
-
03-07-2019 - |
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];
}
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: