2011-04-04 7 views
9

Estoy atascado :(
En mi aplicación, necesito una actualización de CLLocationManager cada vez que se actualiza a una nueva posición. No estoy usando archivos XIB/NIB, todo lo que he codificado lo he hecho programáticamente. :?
el .h¿Cómo actualizar un UILabel en Xcode mediante programación sin archivos XIB?


@interface TestViewController : UIViewController 
    UILabel* theLabel; 

@property (nonatomic, copy) UILabel* theLabel; 

@end 

la .m


... 

-(void)loadView{ 
    .... 
    UILabel* theLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0,0.0,320.0,20.0)]; 
    theLabel.text = @"this is some text"; 

    [self.view addSubView:theLabel]; 
    [theLabel release]; // even if this gets moved to the dealloc method, it changes nothing... 
} 

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{ 
    NSLog(@"Location: %@", [newLocation description]); 

    // THIS DOES NOTHING TO CHANGE TEXT FOR ME... HELP?? 
    [self.view.theLabel setText:[NSString stringWithFormat: @"Your Location is: %@", [newLocation description]]]; 

    // THIS DOES NOTHING EITHER ?!?!?!? 
    self.view.theLabel.text = [NSString stringWithFormat: @"Your Location is: %@", [newLocation description]]; 

} 
... 

todas las ideas, o ayudar a

(esto estaba a tope toda la mano así que por favor, perdónenme si parece un poco cerrado) Puedo proporcionar más información si es necesario.

+0

¿El NSLog muestra la ubicación correcta? – GorillaPatch

+0

¿No te refieres a viewDidLoad? –

+0

@Radek Lo puse en loadView, ¿debería colocarse UILabel en viewDidLoad? ¿Ese es el punto de anulación? Y por qué eso haría mudable a UILabel –

Respuesta

16

Su método loadView es incorrecto. No establece la variable de instancia correctamente, sino que genera una nueva variable local. Cámbielo a lo siguiente al omitir UILabel * y no lo suelte porque desea mantener una referencia alrededor de la etiqueta para establecer el texto más adelante.

-(void)loadView{ 
    .... 
    theLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0,0.0,320.0,20.0)]; 
    theLabel.text = @"this is some text"; 

    [self.view addSubView:theLabel]; 
} 

- (void) dealloc { 
    [theLabel release]; 
    [super dealloc]; 
} 

Entonces el acceso posterior directamente la variable de la siguiente manera:

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{ 
    NSLog(@"Location: %@", [newLocation description]); 

    theLabel.text = [NSString stringWithFormat: @"Your Location is: %@", [newLocation description]]; 

} 
+0

Todavía obtengo el texto original "esto es texto", nunca se actualiza, aunque puedo ver la salida NSLog en la consola impresa con una nueva ubicación. –

+0

He actualizado la respuesta. Creo que la variable de instancia theLabel a la que hace referencia en la devolución de llamada delegada del administrador de ubicación sigue siendo nula porque tiene que asignársela correctamente. – GorillaPatch

+0

tenía razón, necesitaba ser una var local ... podría cambiar el código anterior y eliminar la [publicación LaLabel] con un comentario, ya que se lanzaría demasiado pronto (es decir, un error tipográfico en la respuesta) ¡Gracias, Rock! –

0

¿Está sintetizando theLabel en su archivo .m ...? Si no es así, debes hacerlo, creo.

+0

El compilador dará una advertencia si getter y setter no están implementados y no se proporciona @synthesize. – GorillaPatch

+0

que el OP podría haber logrado ignorar, posiblemente ... –

Cuestiones relacionadas