0

コードのみを使用して作成されたUIがあります。すべて(UIlabelsなど)は、ViewControllerの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で[selfupdateLabel]を呼び出します。ラベルは更新されません。ただし、updateLabelメソッド内にある同じコードをビューに入れてロードした場合、コードは機能します。

UIlabelは[selfupdateLabel]の前に初期化されています(alloc init)。ビューの内側が読み込まれました。

Interface Builderを使用してラベルオブジェクトを初期化したくない場合、どのように適切に初期化する必要がありますか?同じViewController内の他のメソッドからアクセスできるようにしますか?

4

1 に答える 1

2

ビューコントローラでラベルの@propertyを作成しましたが、ラベルを作成するときに、プロパティではなくローカル変数に割り当てています。このため、後で値を割り当てたいときに、他のメソッドから参照することはできません。

viewDidLoadで、作成したUILabelオブジェクトを次のようにプロパティに割り当てます。

self.lbl = lbl;

次に、あなたのupdateLabel方法で:

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