Pregunta

A continuación se muestra un bloque de código que se ejecuta en un subproceso separado del subproceso principal de mi aplicación. ¿Cómo consigo que la interfaz de usuario se actualice después de que cada botón obtenga su miniatura? En este momento no se actualiza hasta que todo el método termina. Los botones ya están agregados a un UIScrollView.

(LotsGridButton es solo un UIButton con algunas propiedades adicionales)

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

Solución

En lugar de setImage: forState: , eche un vistazo al método performSelectorOnMainThread: , por ejemplo:

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

Otros consejos

No tengo experiencia con el iPhone, pero en Cocoa en general se supone que debes actualizar la interfaz de usuario solo desde el hilo principal.

Desde un subproceso diferente, puede ejecutar código en el subproceso principal utilizando los objetos NSObject:

performSelectorOnMainThread:withObject:waitUntilDone:
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top