3

loadView の使用時に viewDidLoad が呼び出されない理由を誰でも説明できますか? viewDidLoad がまだ呼び出されるべきであることは私の理解です。

- (void)loadView
{
    CGRect currentFrame = [[UIScreen mainScreen] applicationFrame];

    UIView* myView = [[UIView alloc] initWithFrame:CGRectMake(currentFrame.origin.x, currentFrame.origin.y, currentFrame.size.width, currentFrame.size.height)];
    myView.backgroundColor = [UIColor redColor];

    self.view = myView;
    [myView release];

    [super loadView];
}

- (void)viewDidLoad {

    //this never happens
    NSLog(@"VIEW DID LOAD!");
    [super viewDidLoad];
}
4

3 に答える 3

7

アプリケーションで loadView を手動で呼び出すと、viewDidLoad が呼び出されないことがわかりました。loadView を手動で呼び出す場合は、viewDidLoad も手動で呼び出す必要があります。

さらに、Apple docs によると、ビューをデフォルトの UIView で上書きするため、[super loadView] を呼び出すべきではありません。

于 2011-01-25T10:41:30.067 に答える
3

ここで警告が必要です。

NSLog("VIEW DID LOAD!");

代わりに、次のように記述します (@ 記号が必要です)。

NSLog(@"VIEW DID LOAD!");
于 2011-01-11T00:57:53.203 に答える
1

ViewController のインスタンスを作成しても、viewDidLoad は呼び出されません。それをナビゲーションコントローラーにプッシュするか、モデルビューコントローラーとして提示すると、viewDidLoadのみが呼び出されます。viewController を提示しない限り、これらのデリゲートは呼び出されません。もう1つ、ビューコントローラーのプレゼンテーションが終了してもスタックまたはメモリに残っている場合、viewDidLoadメソッドは既にビューをロードしているため、再度呼び出されることはありません。次に、viewWillAppear および viewDidAppear デリゲートは、同じ viewController を提示したときにのみ呼び出されます。

于 2013-03-14T17:59:51.873 に答える