2011-07-05 7 views
2

このサイトで質問をしています。アマチュア開発者として、私はこのサイトの質問にいつも答えを見つけましたが、私の現在の問題に私は見つけられませんでした。私のiPadアプリでiOSプログラミング: 'super dealloc'がアプリをクラッシュさせる

私はrootViewから新しいのUIViewControllerを呼び出す:

DisplayTheMapViewController_iPad *root = [[DisplayTheMapViewController_iPad alloc] init]; 
displayTheMapViewController=root; 
[[self navigationController] pushViewController:displayTheMapViewController animated:YES]; 
[root release]; 

私がメインビューには、このビューから戻ってアプリケーションがクラッシュ(それが分を取るか、そう、その後、すべてのものになるまで通常は発生しますが、常に発生します)、自動解放プールエラーが発生します。

私は[root release]とコメントしてもアプリは生きていますが、別の問題があります:ビューに2度目の訪問(最初ではありません)アプリがクラッシュし、次のエラーが表示されます。

'ウィンドウを持たないビューからポップオーバーを表示できません。'

私は間違ったことをしなければなりません。事前にアドバイスをいただき、ありがとうございます。

答えて

0

割り当てられたオブジェクトの解放を忘れたDisplayTheMapViewController_iPadクラスの上端を確認してください。

1

この行は少し不可解です:

displayTheMapViewController=root; 

私はdisplayTheMapViewControllerはインスタンス変数であることを推測していますか?そうであれば、あなたはrootを割り当てていますが、あなたはrootを保持していません。そのコントローラーがナビゲーションスタックからポップされると、ナビゲーションコントローラーはそれを解放し、他のコントローラーはそれを保持していないので、割り当て解除されます。 displayTheMapViewControllerは無効なオブジェクトを指します。

self.displayTheMapViewController=root; 

displayTheMapViewControllerプロパティが、その内容を保持するように設定されている場合、それは上記のダングリングポインタの問題を回避したい:おそらく、あなたが言うことを意味しました。

+0

ありがとう、それはトリックでした。 :) – Jerubus

0

問題を完全に診断するのに十分なコードを投稿していませんが、displayTheMapViewController = root;という行を確認することをお勧めします。 rootを保持していないので、ビューコントローラがナビゲーションコントローラから削除された後にdisplayTheMapViewControllerがぶら下がってしまいます。

ルートを解放してビューを再入力したときに起こることについては、これは第2のインスタンスがあるとDisplayTheMapViewController_iPadの内部に関係するものと思われます。

+0

ありがとうございました。素晴らしいアドバイス! – Jerubus

関連する問題