2010-08-31 7 views
7

Quiero ejecutar un método en una cadena de fondo, el primer método ejecutará otro método en la misma cadena (de fondo) después de algunos segundos. Escribí esto:iphone: performSelector: withObject: afterDelay: ¿no funciona con un hilo de fondo?

- (IBAction)lauch:(id)sender 
{ 
    [self performSelectorInBackground:@selector(first) withObject:nil]; 

} 
-(void) second { 
    printf("second\n"); 
} 
-(void) first { 
    NSAutoreleasePool *apool = [[NSAutoreleasePool alloc] init]; 
    printf("first\n"); 

    [self performSelector:@selector(second) withObject:nil afterDelay:3]; 

    printf("ok\n"); 
    [apool release]; 
} 

pero nunca se llama al segundo método, ¿por qué? y, ¿cómo puedo lograr mi objetivo?

gracias

Respuesta

9

Tienes que tener un bucle de rodamiento para performSelector: withObject: afterDelay: trabajar.


Su código se ejecuta first y, cuando first salidas, el hilo se ha ido. Necesita ejecutar un ciclo de ejecución.

Añadir:

[[NSRunLoop currentRunLoop] run]; 

Para el final de first.

+0

ouch ... no. Ese debería ser el problema. ¡Gracias! – subzero

+2

No entiendo, ¿cómo no puedes tener un ciclo de ejecución? – bogardon

+0

Yo tampoco lo entiendo. ¿Puede esta respuesta ser un poco más específica? –

Cuestiones relacionadas