私はゲームを作っていて、そのようなView Controllerスキームを持っています1(メニュー)--> 2(レベル選択)--> 3レベル(タイマーなど)--->死亡または勝利4フィニッシュ-->再び2.私がすること これらすべてのView Controllerを配列に保持するシングルトンクラスを作成し、必要に応じてそれらを rootViewControllers として設定しました。しかし、次の問題があります。3 を終了して 4 に移動すると、3 を設定しnil
ますが、3 はまだ機能しているようで (タイマーがコンソールにメッセージを出力しています)、割り当てが解除されません。多分私はviewcontrollersについて何かを理解していません.rootViewControllerとして別のものを設定すると正確に何が起こりますか?
2 に答える
rootViewControllers
そんなに頻繁に切り替える必要はありません。ほとんどの場合、1 つのコントローラーをアプリ全体のルートとして設定します。あなたがすべきことは、 を使用してUINavigationController
を管理することUIViewControllers
です。プログラムを に埋め込めば、UINavigationController
後はナビゲーション コントローラのスタックにプッシュしてポップオフするだけです。これらのいくつかの方法を見てください。
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated
- (UIViewController *)popViewControllerAnimated:(BOOL)animated
同様に、プッシュ セグエを使用してビュー コントローラーをスタックに追加できます (多くの場合、ストーリーボードから初期化されます (ストーリーボードを使用している場合))。
詳細については、UINavigationController
こちらをご覧ください: http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html
あなたの場合、View Controller(配列内)への強い参照があるため、ビューは切り替えられますが、コントローラーはまだ存在するため、そのコントローラーからタイマーを開始した場合、タイマーは引き続き実行されます。タイマーに関しては、#3ビューコントローラーのviewDidDisappearメソッドで無効にする必要があると思います-これで問題が解決するはずです。