Iphone 如何访问从情节提要加载的视图控制器的属性?

Iphone 如何访问从情节提要加载的视图控制器的属性?,iphone,cocoa,storyboard,Iphone,Cocoa,Storyboard,我创建了一个视图控制器实例,该实例使用实例化的eviewcontrollerwhiteIdentifier创建,如下所示: TBSCTestController* testController = [self.storyboard instantiateViewControllerWithIdentifier: @"OTP"]; TBSCTestController具有名为label的IBOutlet属性,该属性与情节提要中的标签连接: 我想使用此代码修改标签的文本,但没有任何更改: tes

我创建了一个视图控制器实例,该实例使用
实例化的eviewcontrollerwhiteIdentifier
创建,如下所示:

TBSCTestController* testController = [self.storyboard instantiateViewControllerWithIdentifier: @"OTP"];
TBSCTestController
具有名为
label
IBOutlet
属性,该属性与情节提要中的标签连接:

我想使用此代码修改
标签的文本,但没有任何更改:

testController.label.text = @"newText";
[self.view addSubview: testController.view];  
testController
是一个有效实例,但
label
是nil。
我错过了什么?

您的
UILabel
nil
,因为您已经实例化了控制器,但它没有加载其视图。控制器的视图层次结构在您第一次请求访问其视图时加载。因此,正如@lnafziger所建议的(尽管正是因为这个原因,应该很重要),如果您切换这两条线路,它就会工作。因此:

[self.view addSubview: testController.view];  
testController.label.text = @"newText";
举个例子来说明这一点,即使是这一点也可以:

// Just an example. There is no need to do it like this...
UIView *aView = testController.view;
testController.label.text = @"newText";
[self.view addSubview: testController.view];  
或者这个:

[testController loadView];
testController.label.text = @"newText";
[self.view addSubview: testController.view];  

我猜你的标签没有连接到你的IBOutlet,因为你这样做是正确的。@lnafziger我已经检查了我的故事板,标签已经连接到我的IBOutlet。这不重要,但如果你切换最后两行呢?@lnafziger应该重要,请参阅下面我的答案。小心!苹果建议不要直接调用这个方法。当您直接调用此方法时,您将无法调用ViewDidLoad方法,并且您将看到一些潜在的不稳定行为。@MarkL,这就是为什么我有一个注释说没有必要这样做的原因。。。这只是帮助OP了解问题的一个例子。@Alladinian,我不清楚你反对这种方法。我只是想让其他人知道,苹果公司不推荐使用loadView方法,这样可以避免调用ViewDidLoad。@MarkL你能推荐一种更好的方法吗?