0

다음과 같은 문제가 있습니다. 앱에 두 개의 기본 컨트롤러 (a) loginController 및 (b) contentController가 있습니다. 사용자가 로그인했는지 확인합니다. if 예, 그렇지 않으면 login controller를 보여줍니다. 그래서 didFinishLaunchingWithOptions에서이 컨트롤러 중 하나를 window.rootViewController에 지정합니다. 나는 다음과 같은 코드를 사용이 달성 (사용자가 로그인 또는 로그 아웃했기 때문에) 나는 하나의 컨트롤러에서 다른 전환 할 때 문제는이 전환되기 전에ios : window.rootViewController 및 메모리 관리를 변경하십시오.

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

을 인 LoginController, window.rootViewController 된 나는이 오류가없이 내 컨트롤러를 해제 할 수 있습니다 방법을 이해하고 싶은

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

: 여기 문제는이 코드가 실행될 때 나는 다음과 같은 오류가 나타날 수 있다는 것입니다. 런타임에서 window.rootViewController를 변경하는 가장 좋은 방법이 무엇인지 제안 할 수 있다면 좋을 것입니다.

+0

[이 답변] (http://stackoverflow.com/a/5279474/120497)에서 설명한대로 viewWillDisappear : 및 viewDidDissappear :가 호출되지 않았을 수 있었습니까? – djskinner

답변

1

더 많은 코드를 보지 않고도 왜 메모리 관리 문제가 있는지 확인할 수 없습니다. 그러나 나는 다른 대답을하고 싶습니다. 컨텐트 컨트롤러를 항상 창의 루트 컨트롤러로 만듭니다. 로그인 화면을 표시해야하는 경우 컨텐츠 컨트롤러를 통해 모달보기 컨트롤러로 표시하십시오. 이것은 루트보기 컨트롤러를 전환하는 것보다 훨씬 쉬울 것입니다. 시작할 때 애니메이션없이 표시 할 수 있으므로 사용자는 결코 전환을 보지 못합니다. 로그인 할 때 그 아래에있는 컨텐트 컨트롤러를 표시하는 여러 가지 방법을 취소 할 수 있습니다. 사용자가 로그 아웃하면 컨텐츠 컨트롤러에 대한 모달 컨트롤러로 로그인 컨트롤러를 다시 표시 할 수 있습니다.

+0

답을 고맙게 생각하지만 제안한 해결책이 내 앱 아키텍처에 맞지 않습니다. 모달 컨트롤러를 표시하려면 viewDidAppear를 기다려야합니다. –

+0

아니요, 다른보기 컨트롤러의 viewDidLoad 메서드에서 모달보기 컨트롤러를 제공 할 수 있습니다. 사용자는 첫 번째 컨트롤러를 보지 못합니다. – rmaddy

+0

네, 맞습니다. 어쨌든이 접근법은 제 메모리 관리 문제를 해결하지 못합니다. 한 번에 하나의 뷰 컨트롤러 계층 만 갖습니다. –