2014-02-02 2 views
0

Я создаю UILabel в методе под названием displayTempПравильный путь возвращения метод IOS UILabel

- (UILabel *) displayTemp 
{ 
_tempLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 240, 300, 30)]; 
[self.view addSubview:_tempLabel]; 

NSDictionary *key = [self.getAPICall objectForKey:@"currently"]; 

_tempLabel.text = [key objectForKey:@"temperature"]; 

return _tempLabel; 
} 

Это просто просто вернуть значение из вызова API.

Затем я хочу, чтобы показать Дис UILabel и его текст в методе viewDidLoad

- (void)viewDidLoad 
{ 
self.view.backgroundColor = [UIColor colorWithRed:0.976 green:0.518 blue:0.439 alpha:1]; 

UILabel *getTemp = self.displayTemp; 
//How do I return the text property of self.DisplayTemp 
} 

Как бы я тогда это вернуть? Есть ли лучший способ сделать это?

ответ

1

Вы смешиваете здесь идиомы. Вместо того чтобы делать это типа «@property» вещь:

UILabel *getTemp = self.displayTemp; 

Изменить что линия к этому:

[self displayTemp]; 

в методе «viewDidLoad», и вы будете в порядке. Вам не нужно возвращать объект UILabel из метода displayTemp, потому что вы уже добавляете его в представление вашего контроллера.

+0

Ах, да, я понимаю. Когда я запускаю приложение, я получаю это исключение: непризнанный селектор, отправленный в экземпляр Завершающее приложение из-за неотображенного исключения «NSInvalidArgumentException», причина: '- [__ NSCFNumber length]: непризнанный селектор, отправленный экземпляру 0x917de20' – joshuahornby10

+0

Это происходит из другой части ваш код. Я не вижу слово «длина» в фрагменте кода, которое вы задали в вопросе. Похоже, вы пытаетесь получить длину строки объекта, который действительно является объектом «NSNumber». –

+0

О да, конечно, я знаю, что это. Огромное спасибо за вашу помощь. – joshuahornby10

0

В дополнение @ ответ MichaelDautermann, я предлагаю вам создать UILabel только один раз в -(UILabel *)displayTemp метода с условной ветви (если). Хотя этот метод будет вызываться только один раз, так как он вызывается -(void)viewDidLoad, с точки зрения архитектуры класса, вы должны сделать метод более гибким и безопасным для множества вызовов.

Поэтому я модифицировал метод следующим образом:

- (UILabel *) displayTemp 
{ 
    if (_tempLabel == nil) { 
     _tempLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 240, 300, 30)]; 
     NSDictionary *key = [self.getAPICall objectForKey:@"currently"]; 
     _tempLabel.text = [key objectForKey:@"temperature"]; 
     [self.view addSubview:_tempLabel]; 
    } 

    return _tempLabel; 
} 

Я надеюсь, что мое предложение будет полезно для вас.

Смежные вопросы