0

私はゲームを作っていて、そのようなView Controllerスキームを持っています1(メニュー)--> 2(レベル選択)--> 3レベル(タイマーなど)--->死亡または勝利4フィニッシュ-->再び2.私がすること これらすべてのView Controllerを配列に保持するシングルトンクラスを作成し、必要に応じてそれらを rootViewControllers として設定しました。しかし、次の問題があります。3 を終了して 4 に移動すると、3 を設定しnilますが、3 はまだ機能しているようで (タイマーがコンソールにメッセージを出力しています)、割り当てが解除されません。多分私はviewcontrollersについて何かを理解していません.rootViewControllerとして別のものを設定すると正確に何が起こりますか?

4

2 に答える 2

0

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

于 2012-07-25T23:46:04.070 に答える
0

あなたの場合、View Controller(配列内)への強い参照があるため、ビューは切り替えられますが、コントローラーはまだ存在するため、そのコントローラーからタイマーを開始した場合、タイマーは引き続き実行されます。タイマーに関しては、#3ビューコントローラーのviewDidDisappearメソッドで無効にする必要があると思います-これで問題が解決するはずです。

于 2012-07-25T23:48:58.573 に答える