0

私は次の問題に直面しています:私のアプリには2つのメインコントローラー(a)loginControllerと(b)contentControllerがあります。アプリの起動時に、ユーザーがログインしているかどうかを確認します。はいの場合はcontentControllerを表示し、そうでない場合はログインコントローラーを表示します。したがって、基本的に、didFinishLaunchingWithOptionsで、このコントローラーの1つをwindow.rootViewControllerに割り当てます。問題は、これを達成するために1つのコントローラーから別のコントローラーに切り替えたい場合(ユーザーがログインまたはログアウトしたため)、次のコードを使用することです。

[UIView transitionWithView:self.window
                  duration:0.65
                   options:UIViewAnimationOptionTransitionFlipFromLeft
                animations:^{
                    self.window.rootViewController = self.contentController;
                }
                completion:^(BOOL finished){
                    [self.loginController release];
                }];

この遷移window.rootViewControllerがloginControllerになる前の問題は、このコードを実行すると次のエラーが発生することです。

-[loginController _preferredInterfaceOrientationGivenCurrentOrientation:]: message sent to deallocated instance 0x1c55b490

このエラーが発生せずにコントローラーを解放する方法を理解したいと思います。実行時にwindow.rootViewControllerを変更するための最良のアプローチを誰かが私に提案してくれると、それも素晴らしいことです。

4

1 に答える 1

1

より多くのコードを見なければ、メモリ管理の問題が発生している理由を特定することは不可能です。しかし、私は別の答えを提供したいと思います。コンテンツコントローラーを常にウィンドウのルートコントローラーにします。ログイン画面を表示する必要がある場合は、コンテンツコントローラー上にモーダルビューコントローラーとして表示します。これは、ルートビューコントローラーを切り替えるよりもはるかに簡単です。起動時にアニメーションなしで表示できるため、ユーザーには遷移が表示されません。ログインすると、その下にあるコンテンツコントローラーを表示する方法をいくつでも却下できます。ユーザーがログアウトすると、コンテンツコントローラー上のモーダルコントローラーとして、ログインコントローラーを再度表示できます。

于 2012-10-16T16:19:38.090 に答える