2015-02-09 2 views
0

Я инстанцирование контроллера представления из раскадровки с этим кодом:Невозможно назначить для просмотра свойства контроллера после инстанцирования из раскадровки

CalloutViewController *calloutVC = (CalloutViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"CalloutViewController"]; 

и пытаюсь приписать это свойство nameLabel, заявил здесь в своем заголовке:

@interface CalloutViewController : UIViewController 

@property (strong, nonatomic) IBOutlet UILabel *nameLabel; 
... 
@end 

использованием

calloutVC.nameLabel.text = @"test"; 

Однако, после того, как assignmen t, свойство все еще равно нулю.

+1

В какой метод вы пытаетесь установить текст лейбла? А что такое ноль? Текст или имяLabel? – rdelmar

ответ

1

Это потому, что IBOutlet еще не загружен. Вам необходимо создать свойство NSString и присвоить ему значение. И в CalloutViewControllerviewDidLoad присвойте значение своему IBOutlet.

Как:

@interface CalloutViewController : UIViewController 

@property (nonatomic, weak) IBOutlet UILabel *nameLabel; 
@property (nonatomic, copy) NSString *nameValue; 
... 
@end 

И в вашем viewDidLoad

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.nameLabel.text = self.nameValue; 
    ... 
} 

И присвоить свойство, как:

calloutVC.nameValue = @"test"; 
+0

Спасибо ... ты спас мне массу времени! Вы знаете, почему делать то же самое с не-IBOutlet UILabel не получилось бы? например, у меня только – michael

+0

@michael: Вы выделили эту метку перед использованием? –

+0

Нет, это была проблема! Смешно очевидно в ретроспективе, но я просто этого не видел. Я просто передал словарь, а затем назначил все в viewDidLoad. Еще раз спасибо! – michael