如何在没有XIB文件的情况下以编程方式更新Xcode中的UILabel?

dcr*_*tar 9 iphone xcode uilabel settext ios

我被卡住了:(
在我的应用程序中,每当它获得新位置的更新时我都需要从CLLocationManager更新.我没有使用XIB/NIB文件,我编写的所有内容都是以编程方式完成的.代码:
.h


@interface TestViewController : UIViewController
    UILabel* theLabel;

@property (nonatomic, copy) UILabel* theLabel;

@end
Run Code Online (Sandbox Code Playgroud)

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

}
...
Run Code Online (Sandbox Code Playgroud)

有什么想法,还是帮忙?

(这一切都被卡住了所以请原谅我,如果看起来有点傻瓜)我可以提供更多信息,如果需要的话.

Gor*_*tch 16

你的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];
}
Run Code Online (Sandbox Code Playgroud)

然后直接访问变量,如下所示:

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

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

 }
Run Code Online (Sandbox Code Playgroud)