私のアプリケーションが最初にロードされるとき、UIWindow
のrootViewController
プロパティをcontrollerA
に設定しました。UIWindowのrootViewControllerを変更する
いつか私のアプリではrootViewController
をcontrollerB
に変更することを選択します。
問題は、私がcontrollerB
でフリップトランジションを実行するときに、その後ろにcontrollerA
のビューが表示されることがあるということです。何らかの理由でビューが削除されていない。さらに気になるのは、rootViewController
をcontrollerB
に設定した後、controllerA
のdealloc
メソッドは決して解雇されないということです。
は私が手動でcontrollerB
に切り替える前UIWindow
のサブビューを削除しようとした、それはまだと呼ばれることは決してありませんSのdealloc controllerA
「バックグラウンドが、controllerA
での見解」を見ての問題を解決します。 ここで何が起こっていますか?
リンゴドキュメントは言う:
ルート・ビュー・コントローラは、ウィンドウのコンテンツビューを提供します。このプロパティにビューコントローラを割り当てる(プログラムまたはInterface Builderを使用)と、ビューコントローラのビューがウィンドウのコンテンツビューとしてインストールされます。ウィンドウに既存のビュー階層がある場合、古いビューは新しいものがインストールされる前に削除されます。
UPDATE
ここに私AppDelegateのコードです:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self showControllerA];
[self.window makeKeyAndVisible];
return YES;
}
- (void)showControllerA
{
ControllerA* a = [ControllerA new];
self.window.rootViewController = a;
}
- (void) showControllerB {
ControllerB* b = [ControllerB new];
self.window.rootViewController = b;
}
アプリケーションデリゲートに 'application:didFinishLaunchingWithOptions:'メソッドのコードを提供できますか? – Cezar
愚かな質問ですが、2番目のコントローラを押すと 'controllerA'をnilに設定しますか?そうでなければ、それはdeallocしません。 (私はあなたがいると仮定しています) – Putz1103
controllerAへのポインタを保持しないので、何をnilに設定するかはわかりません。 – aloo