0

我有一个几乎只使用代码制作的 UI:所有内容(UIlabels 等)都在视图控制器的 viewdidload 中初始化。

。H

@interface homeViewController : UIViewController {

    //IBOutlet UILabel *lbl; // not using an outlet anyway...
    UILabel *lbl; 
}

@property(nonatomic,retain) UILabel *lbl;



@end

.m

@interface homeViewController ()

@end

@implementation homeViewController

@synthesize lbl;



-(void)updateLabel {


    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];

    double temptemp2 = [ud doubleForKey:@"somekey"];

    lbl.text = [NSString stringWithFormat:@"%f", temptemp2]; 

    [ud synchronize];


}

然后在 viewdidload 我只是调用 [self updateLabel]; 并且标签不会更新。但是,如果我将 updateLabel 方法中的相同代码放入视图并加载,则该代码有效。

UIlabel 在 [self updateLabel] 之前被初始化(alloc init);内部视图确实加载了。

如果我不想使用界面生成器来正确初始化标签对象,我应该如何正确初始化它?以便可以从同一视图控制器内的其他方法访问它?

4

1 回答 1

2

您已经在视图控制器上为标签创建了@property,但是当您创建标签时,您将其分配给局部变量而不是属性。因此,当您想要分配值时,您以后无法从其他方法中引用它。

在您的viewDidLoad中,将您创建的 UILabel 对象分配给属性,如下所示:

self.lbl = lbl;

然后在你的updateLabel方法中:

self.lbl.text = [NSString stringWithFormat:@"%f", temptemp2]; 
于 2012-08-14T23:00:53.393 回答