No se actualiza el text de UILabel

No puedo cambiar el text de UILabel. El código para el UILabel dentro de viewDidLoad es:

startLabel=[[UILabel alloc] initWithFrame:CGRectMake(75, 395, 200, 30)]; startLabel.text=@"Recording Sound ..."; startLabel.backgroundColor=[UIColor clearColor]; startLabel.textColor=[UIColor whiteColor]; startLabel.font=[UIFont boldSystemFontOfSize:17]; [self.view addSubview:startLabel]; 

Más tarde, si quiero cambiar la label del text con el siguiente código, no cambia en la aplicación:

 startLabel.text=@"Searching Database ..."; 

o

 [startLabel setText:@"Searching Database ..."]; 

El UILabel no está vacío, lo imprimí durante la debugging y muestra:

 (gdb) po startLabel <UILabel: 0x2c1a30; frame = (75 395; 200 30); text = 'Searching Database ...'; clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x2ae8f0>> 

Entonces, el text de la label cambia dentro de la UILabel, pero no se actualiza en la pantalla.

¿Alguien puede hacerme amablemente saber lo que me falta aquí? Gracias.

Edit 1: Intenté performSelectorOnMainThread: – No funcionó para mí. Edición 2: estoy usando las classs AVFoundation y ASIHTTP para grabar sonido y cargar el file grabado aquí. Nada más. No usé ningún hilo.

Es posible que se enfrente a un problema con el subprocesamiento como se menciona en los comentarios anteriores. Si tiene un método que se ejecuta en el hilo principal y realiza alguna actividad (como search una database), las actualizaciones que realice en la interfaz de usuario no se confirmarán hasta que el ciclo de ejecución obtenga el control. Por lo tanto, si tiene una tarea larga y prolongada en el hilo principal, ejecute este código después de configurar el text de la label:

 - (void)doSomethingTimeConsuming ... consume some time ... ... set text of label ... [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]]; ... continue long operation ... } 

Esto debería eliminar cualquier cambio en la interfaz de usuario que haya realizado. Aunque esto puede ser un hack sensible y funcional, no supera la alternativa. Le sugiero que realice las tareas que consume mucho time de su aplicación en un subprocess de background y actualice la interfaz de usuario a través del subprocess principal utilizando performSelectorOnMainThread:withObject:waitUntilDone: Consulte la página de Apple en iOS Thread Management .

En mi caso, la function que estaba actualizando fue invocada desde un reconocedor táctil en un hilo, pero el lugar en la function donde estoy cambiando el valor de la propiedad de text de la label lo puse de nuevo en el hilo principal:

 dispatch_async(dispatch_get_main_queue(), ^{ [self.someLabel setText:someString]; }); 

El mío es un poco más inesperado, aunque razonable, pero no es algo sobre lo que nadie piense demasiado.

Se supone que UILabel actualizar el UILabel cuando recibo una NSNotification que disparé en otro lugar. Sin embargo, la notificación se activó desde un hilo de background, por lo que incluso los methods de escucha que actualizan el text de la label se disparan en segundo plano.

Si NSNotification en una NSNotification para actualizar la label, o cualquiera de tus puntos de vista, NSNotification la NSNotification desde el hilo principal de la interfaz de usuario.

Tenía un UILabel mostrando un número de nivel que no se actualizaría al nuevo número de nivel en un UIViewController. La única solución viable que pude encontrar que funcionó fue llamar a setNeedsDisplay en el hilo principal del controller de vista que poseía el UILabel

 -(void)changeLevelLabel:(int)theLevel { dispatch_async(dispatch_get_main_queue(), ^{ self.levelLabel.text = [NSString stringWithFormat:@"%d",theLevel]; [self.levelLabel setNeedsDisplay]; }); 

}

Vea http://iosdevelopmentjournal.com/blog/2013/01/16/forcing-things-to-run-on-the-main-thread/ para get una explicación más detallada.