我想测试更改label.text的ViewController的功能。 起初我试过这个:
ViewController* controller = [[ViewControlleralloc] initWithNibName:@"ViewController_iPhone"bundle:nil];
[controller pressed];
NSLog(@"%@",controller.label.text);
按下的功能如下:
-(void)pressed{
self.label.text = @"hello";
}
但是,结果为NULL。 后来我改变了代码如下:
AppDelegate *delegate = [[UIApplicationsharedApplication] delegate];
ViewController* controller = [[ViewControlleralloc] initWithNibName:@"ViewController_iPhone"bundle:nil];
delegate.window.rootViewController = controller;
[controller pressed];
NSLog(@"%@",controller.label.text);
我认为这段代码
delegate.window.rootViewController = controller;
可以加载控制器的视图,以便可以更改标签的文本。但我不知道为什么。
答案 0 :(得分:2)
你是对的。
在需要之前不会加载视图。简单地创建视图控制器不会触发视图加载,但是分配窗口的根视图控制器需要将其设置为显示,因此实例化并链接所有nib对象。
对视图的任何引用也会导致它加载,甚至类似于:
ViewController* controller = [[ViewControlleralloc] initWithNibName:@"ViewController_iPhone"bundle:nil];
NSLog(@"%@", controller.view);