UIlabels инициализируется в другом месте, кроме.storyboard (ссылка на Outlet) или и загружает int в виду загрузил?

У меня есть пользовательский интерфейс, который был сделан только с использованием кода: все (UIlabels и т. Д.) Инициализируются внутри viewdidload контроллера представления.

.час

@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 инициализируется (alloc init) перед [self updateLabel]; внутри зрения действительно загрузился.

Как правильно инициализировать объект метки, если я не хочу делать это с помощью конструктора интерфейса? чтобы он был доступен из других методов внутри того же контроллера представления?

1 ответ

Решение

Вы создали @property в вашем контроллере представления для метки, однако, когда вы создаете метку, вы назначаете ее локальной переменной, а не свойству. Из-за этого вы не можете ссылаться на него позже из другого метода, когда хотите присвоить значение.

В вашем viewDidLoad, присвойте объект UILabel, который вы создали, свойству следующим образом:

self.lbl = lbl;

Тогда в вашем updateLabel метод:

self.lbl.text = [NSString stringWithFormat:@"%f", temptemp2]; 
Другие вопросы по тегам