请耐心等待,我还在学习 Cocoa Touch。其他 -viewDidLoad 未被调用问题与我的问题无关,我进行了搜索。
I have FooViewController
, a UIViewController
子类。 FooViewController.xib 将其文件所有者设置为 FooViewController。另外,我有Main
,其应用程序委托是MyApplication
文件的所有者是UIApplication
。我的主笔尖设置为“Main”。
我可以使用以下流程使视图出现在屏幕上(为简洁起见,剪掉了代码):
UIWindow *main;
-(void)applicationDidFinishLaunching:(UIApplication*)application {
[self showFooViewController];
[main makeKeyAndVisible];
}
-(void)showFooViewController {
fooViewController = [[FooViewController alloc] init];
if(![[NSBundle mainBundle] loadNibNamed:@"FooViewController" owner:fooViewController options:nil]) {
DebugF(@"Failed to load FooViewController");
return;
}
// Add the view and put it in place
UIView *view = [fooViewController view];
CGRect cur = [view frame];
cur.origin = CGPointMake(0.0f, 20.0f);
[view setFrame:cur];
[main addSubview:[fooViewController view]];
}
但是,此消息不会发送至FooViewController
:
- (void) viewDidLoad {
DebugF(@"Hello!");
}
gdb 的输出完全沉默。
我看过其他 Cocoa 教程,它们在 IB 的文档视图中显示实例等,但我在我的教程中没有看到这些选项。我应该在 Nib 中实例化 fooViewController 吗?我错过了连接吗?在 FooViewController.xib 中,文件的所有者视图连接到 Nib 中的视图。
我确信这是一个简单的解决方案,但我走错了路。哈普!
我还没有找到支持以下内容的文档,但这是我通过实验/经验推断出的:
The viewDidLoad
预计该方法将在之后立即调用loadView
被调用,这取决于调用者loadView
提供额外的调用viewDidLoad
.
在某些情况下,SDK 会为您处理此行为。假设你有一个子类UIViewController
called MyViewController
; then:
- 如果您访问
myViewController.view
在你打电话之前loadView
,那么超类访问器足够聪明,可以调用loadView
为你,以及viewDidLoad
此后立即。
结果,如果您的代码如下所示:
MyViewController *myViewController = [[MyViewController alloc] init];
[superView addSubview:myViewController.view]; // Calls viewDidLoad.
然后两个loadView
and viewDidLoad
将代表您致电。
但是,如果您的代码如下所示:
MyViewController *myViewController = [[MyViewController alloc] init];
[myViewController loadView];
[superView addSubview:myViewController.view]; // Doesn't call viewDidLoad.
那么view
getter 可以看到您已经加载了视图,并且它假设您还调用了viewDidLoad
同样 - 所以它也不会调用。讽刺的是,这里额外的函数调用阻止了viewDidLoad
从被打电话。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)