Как обновить UILabel в Xcode программно без файлов XIB? - PullRequest
9 голосов
/ 04 апреля 2011

Я застрял: (
В моем приложении мне требуется обновление от CLLocationManager каждый раз, когда оно получает обновление на новую должность. Я не использую файлы XIB / NIB, все, что я написал, я сделал программно. К коду:
.h


@interface TestViewController : UIViewController
    UILabel* theLabel;

@property (nonatomic, copy) UILabel* theLabel;

@end


...

-(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]];

}
...

Есть идеи или помощь?

(все это было защемлено рукой, поэтому, пожалуйста, простите меня, если это выглядит немного странно) Я могу предоставить больше информации, если необходимо.

Ответы [ 2 ]

16 голосов
/ 04 апреля 2011

Ваш метод loadView неверен. Вы не устанавливаете переменную экземпляра должным образом, но вместо этого вы генерируете новую локальную переменную. Измените его на следующее, пропустив UILabel * и , не выпускайте его , потому что вы хотите сохранить ссылку на метку, чтобы установить текст позже.

-(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];
}

Затем позже напрямую получите доступ к переменной, как это:

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

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

 }
0 голосов
/ 04 апреля 2011

Вы синтезируете theLabel в своем файле .m ...? Если нет, то, я думаю, вам нужно.

...