0

私は非常にめちゃくちゃなビューシステムを実行しています。いくつかのモーダルビューを確認してから、元のビューに戻ります(ループバックします)。唯一の問題は、メモリが不足してアプリがクラッシュするまで、他のビューの上に新しいビューを割り当て続けることです。プレビュービューコントローラーに戻ることはなく、メモリブロックを解放する必要があることをアプリに伝えるにはどうすればよいですか?次のようなことをしたいと思います:self.presentingViewController = nil; しかし、それは読み取り専用であり、私がそれについて考えるほど、そのようには機能しません。これが私のストーリーボードです。 ここに画像の説明を入力してください

4

1 に答える 1

1

あなたが何をしているのか、そしてなぜそれがあなたが期待するように機能しないのかは完全には明らかではありませんが、私は次のアプローチがあなたのために働くはずだと思います:

  1. 「ルートテーブルビュー」から始めて、モーダルを実行します

  2. *次に、「プレースホールド」テキストを含むビューから、ゲームコントローラーにモーダルします

  3. 次に、モーダルでnavcontroller/rootテーブルビューに戻ります。

– presentViewController:animated:completion:私はあなたが1.と2を使って(または現在非推奨になっている)やっていると仮定します– presentModalViewController:animated:

3.を行うには、次の電話番号を呼び出す必要があります。

[self.presentingController dismissViewControllerAnimated:ZZZ completion:nil];

これにより、ルートテーブルビューから却下するものまでのすべてのモーダルビューコントローラが却下されます。

すでにこれを実行していて、希望どおりに機能しない場合は、モーダルビューコントローラーを閉じて、同じ実行ループサイクル内で新しいコントローラーを提示していることが原因である可能性があります。これを回避するには、ルートコントローラーでメソッドを定義するだけです。

    - (void)presentFirstViewController {
        [self presentViewController:xxxxx animated:YES completion:nil];
    }

後で、次のようにしてモーダルコントローラーを閉じます。

self.presenting.Controller dismissViewControllerAnimated:YES completion:nil];

そして、新しいものを提示します:

[rootController performSelector:@selector(presentFirstViewController) withObject:nil afterDelay:0.0];

この最後のステップは、実行ループが終了時に物事をクリーンアップし、モーダルコントローラーを連続して提示するための時間を提供します。

これがお役に立てば幸いです。

于 2012-12-24T22:21:14.357 に答える