4

나는 내보기 [Will/Did] 앱에 반환 할 때 Disappear 메서드가 실행되지 않는 문제가있는 응용 프로그램에서 작업합니다.viewDidDisappear가 호출되지 않았습니다.

이 케이스에는 두 개의보기 컨트롤러가있는 UINavigationController가 있습니다. 사용자가 홈 버튼을 누르면 사용자는 로그 아웃됩니다. 그가 나중에 응용 프로그램에 반환하는 경우, 다음 (간체) 코드 내 AppDelegate에에서 실행 :

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    [(UINavigationController *)self.window.rootViewController popToRootViewControllerAnimated:NO]; 
    [self.window.rootViewController presentModalViewController:loginViewController animated:NO]; 
} 

내 탐색 컨트롤러 스택 뷰 컨트롤러를 팝업 때, 나는 view[will|did]disappear 메소드가 호출 될 것으로 기대한다. 그러나 iOS가 이러한 메소드를 실행하려고 할 때 (더 이상 화면에 표시되지 않기 때문에) 그렇지 않습니다. 모달 뷰 컨트롤러가 인계받은 것 같습니다.

모달보기 컨트롤러를 제공하지 않으면 view[will|did]disappear 메서드가 예상대로 호출됩니다.

내 질문은 : view[will|did]disappear 메서드를 호출하려면 어떻게해야합니까? 그러면 코드를 구조화 할 수 있습니까? 내 모달 loginViewController를 제공 할 수있는 더 좋은 곳이 있습니까?

편집 : 더 명확하게 내 문제를 보여주기 위해

, 나는 여기 아주 간단한 테스트 프로젝트를 만들었습니다 https://github.com/JohanVase/ModalViewCauseMissingViewDisappearCalls합니다. 앱의 안내에 따라 몇 번 시도해보고 viewWillDisappear 메소드에서 내 "리소스"를 공개하지 않는지 확인하십시오.

+0

해당보기 컨트롤러가 먼저 표시 되었습니까? IMHO 응용 프로그램이 활성화되고 즉시 루트보기 컨트롤러로 이동하면 누적 된 viewControllers가 표시되지 않고 연속적으로 사라질 수 있습니다. –

+0

수동으로 호출하면 충분합니까? [someViewController viewDidDisappear]; – carlossless

+1

'viewDidDisappear'에서 뭐하고 있니? –

답변

7

마지막으로 Apple 기술 지원부에 동일한 질문을했습니다. 그들은 iOS의 버그라고 결론을 내 렸습니다. 그래서 나는 애플에게 버그 리포트를 제출했습니다. 동일한 버그가 iOS 6 및 최신 iOS 7 (베타 5)에 나타납니다. 해결 방법으로

, 그것은 팝업 전에 당신은 AppDelegate에 다음 네비게이션 컨트롤러의 상위 뷰 컨트롤러에서 호출 할 별도의 방법 에 정리 코드를 이동할 수 있습니다

애플 기술 지원은 다음과 같은 제안 전체 탐색 스택.

그러나보기 컨트롤러에 내 세부 정보가 너무 많이 노출되어 있다고 생각하므로 대신 willMoveToParentViewController:을 사용하여 구현했습니다. 이 메서드는 부모로부터 뷰 컨트롤러를 제거 할 때 호출되며 은 올바르게 호출 된입니다.