2011-01-11 14 views
2

loadViewが使用されているときにviewDidLoadが呼び出されない理由を誰でも説明できますか? viewDidLoadはまだ呼び出されるはずですが、私の理解です。あなたがここに警告していなければなりませんloadViewを使用しているときに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]; 
} 
+0

[super loadView]を呼び出してもよろしいですか? – Eiko

+0

私はそれを試してみました。どちらの方法でも、viewDidLoadは呼び出されません。 – sol

+0

Interface Builderを使用していますか? –

答えて

3

:代わりに

NSLog("VIEW DID LOAD!"); 

を、あなたはこのように書く必要があります(@記号が必要です):

NSLog(@"VIEW DID LOAD!"); 
+0

ok、それはタイプミスでした。しかし、問題はその行が決して全く到達しない理由です。 – sol

+0

1) "@"はまだ試しましたか?それはあなたにエラーが発生しないので試したことを確認してください、それはあなただけ警告を取得するので、あなたはそれを戻す追加することを忘れているかもしれません。 2)loadView()で作成したビューが実際に画面に表示されているのを見たことがありますか?そうでない場合は、最初にビューが作成されなかった可能性があります。 –

+0

はい、ビューが画面に表示されます。 – sol

5

私はちょうどことが判明しましたアプリケーションでloadViewを手動で呼び出すと、viewDidLoadは呼び出されません。 loadViewを手動で呼び出す場合は、手動でviewDidLoadも呼び出す必要があります。

appleのドキュメントによれば、デフォルトのUIViewで表示を上書きするため、[super loadView]を呼び出さないでください。

+0

更新:最近のバージョンのUIKitでは、 'viewDidLoad'を呼び出す' loadViewIfNeeded'を呼び出すことができます – wardw

1

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

関連する問題