2

このサイトで質問するのはこれが初めてです。私はアマチュア開発者として、常にこのサイトで自分の疑問に対する答えを見つけていましたが、現在の問題に対する答えは見つかりませんでした。

私の iPad アプリでは、rootView から新しい UIViewController を呼び出します。

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

このビューからメイン ビューに戻ると、アプリケーションがクラッシュし (1 分ほどかかり、それまではすべて正常ですが、常に発生します)、プールの自動解放エラーが発生します。

[ルート リリース] にコメントすると、アプリは生きたままになりますが、別の問題があります。ビューに 2 回目にアクセスしたとき (最初ではありません!)、ビューにポップオーバーを配置するメソッドを呼び出すと、アプリがクラッシュし、次のエラーが表示されます。

「ウィンドウのないビューからポップオーバーを表示することはできません。」

私は何か間違ったことをしなければなりません。アドバイスをよろしくお願いします。

4

3 に答える 3

1

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

displayTheMapViewController=root;

それdisplayTheMapViewControllerはインスタンス変数だと思いますか?もしそうなら、あなたはそれにルートを割り当てていますが、ルートを保持していません。そのコントローラーがナビゲーション スタックからポップされると、ナビゲーション コントローラーはそれを解放し、他に何も保持されていないため割り当てが解除されます。displayTheMapViewController無効なオブジェクトを指します。おそらくあなたは次のように言うつもりでした:

self.displayTheMapViewController=root;

displayTheMapViewController プロパティがその内容を保持するように設定されている場合、上記のダングリング ポインターの問題を防ぐことができます。

于 2011-07-05T07:16:27.783 に答える
0

問題を完全に診断するのに十分なコードを投稿していませんが、次の行を確認することをお勧めします: displayTheMapViewController = root;. を保持していないため、View Controller が Navigation Controller から削除された後も、ぶら下がったままrootになります。displayTheMapViewController

ルートを解放せずにビューに再度入るとどうなるかについては、これはDisplayTheMapViewController_iPad、2 つ目のインスタンスが存在する場合の内部に関連するものであると思われます。

于 2011-07-05T07:20:52.513 に答える
0

DisplayTheMapViewController_iPad クラスの上部と下部を確認して、割り当てられたオブジェクトを解放するのを忘れました。

于 2011-07-05T07:15:41.437 に答える