gpt4 book ai didi

iphone - -viewDidLoad 未在子类 UIViewController 中调用

转载 作者:太空狗 更新时间:2023-10-30 03:27:27 26 4
gpt4 key购买 nike

请耐心等待,我仍在学习 Cocoa Touch。其他 -viewDidLoad not being called 问题与我的问题无关,我进行了搜索。

我有 FooViewController,一个 UIViewController 子类。 FooViewController.xib 的文件所有者设置为 FooViewController。此外,我还有 Main,它的 App Delegate 是 MyApplication,它的 File's Owner 是 UIApplication。我的主要 Nib 设置为 Main。

我能够使 View 出现在屏幕上,使用这个流程(为简洁起见,代码被剪掉):

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 的输出中完全没有声音。

我看过其他在 IB 文档 View 中显示实例等的 Cocoa 教程,但我没有在我的文档中看到这些选项。我应该在 Nib 中实例化 fooViewController 吗?我错过了连接吗?在 FooViewController.xib 中,文件的所有者 View 连接到 Nib 中的 View 。

我确信这是一个简单的解决方案,但我走错了路。住手!

最佳答案

我没有找到支持以下内容的文档,但这是我通过实验/经验推断的:

viewDidLoad 方法应该在 loadView 被调用后立即被调用,并且由调用 loadView 的人来提供额外的调用viewDidLoad.

在某些情况下,SDK 会为您处理此行为。假设您有一个名为 MyViewControllerUIViewController 子类;然后:

  • 如果您在调用 loadView 之前访问 myViewController.view,那么父类(super class)访问器足够智能,可以为您调用 loadView,并且 viewDidLoad 紧随其后。

因此,如果您的代码如下所示:

MyViewController *myViewController = [[MyViewController alloc] init];
[superView addSubview:myViewController.view]; // Calls viewDidLoad.

然后 loadViewviewDidLoad 都将代表您调用。

但是,如果您的代码如下所示:

MyViewController *myViewController = [[MyViewController alloc] init];
[myViewController loadView];
[superView addSubview:myViewController.view]; // Doesn't call viewDidLoad.

然后 view getter 可以看到您已经加载了 View ,并且它假设您也调用了 viewDidLoad - 所以它不会调用任何一个。具有讽刺意味的是,此处的额外函数调用阻止了 viewDidLoad 被调用。

关于iphone - -viewDidLoad 未在子类 UIViewController 中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1479576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com