2014-02-19 4 views
2

SDK에서 제공하는 상태 복원을 사용합니다.상태 복원 중 RootView 컨트롤러가 짧게 표시됩니다.

스토리 보드에서 모든보기 컨트롤러를로드합니다. 초기 뷰 컨트롤러는 다른 뷰 컨트롤러를 모달로 보여줍니다. 둘 다 복원 식별자가 있습니다.

복원이 제대로 작동하지만 모달로 제공되는보기 컨트롤러에 있고 집을 누르면 (상태 저장). 그런 다음 앱을 다시 열고 상태 복원을 시작하면 다음과 같은 일이 발생합니다.

초당 몇 초 동안 초기보기 컨트롤러가 표시되고 실제로 보려고하는 모달로 표시된 컨트롤러로 화면이 변경됩니다.

왜 이런 일이 발생합니까? 캐시 디렉토리에있는 스냅 샷에는 제시된 뷰 컨트롤러의 올바른 화면이 표시됩니다.

this project과 함께 문제를 재현 할 수 있습니다. 초기 뷰 컨트롤러의 viewDidAppear 방법에 중단 점을 추가하고 상태를 복원 할 때, 당신은 화면과 뷰 계층 구조에서 초기 뷰 컨트롤러의 전망을 볼 수 있습니다 : 당신이보기 컨트롤러 계층 구조를 선택하면 모달 발표 뷰 컨트롤러가 아닌

(lldb) po [[UIWindow keyWindow] recursiveDescription] 
<UIWindow: 0x155607f0; frame = (0 0; 320 480); autoresize = W+H; gestureRecognizers = <NSArray: 0x15560d20>; layer = <UIWindowLayer: 0x1555f4f0>> 
    | <UIView: 0x15542ad0; frame = (0 0; 320 480); autoresize = RM+BM; layer = <CALayer: 0x15542a70>> 
    | | <UIButton: 0x155432d0; frame = (137 269; 46 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x15543b30>> 
    | | | <UIButtonLabel: 0x15663dd0; frame = (0 6; 46 18); text = 'Button'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1566da20>> 
    | | <_UILayoutGuide: 0x15542b60; frame = (0 0; 0 20); hidden = YES; layer = <CALayer: 0x15542fe0>> 
    | | <_UILayoutGuide: 0x15541060; frame = (0 480; 0 0); hidden = YES; layer = <CALayer: 0x155410d0>> 

초기보기 컨트롤러에서 속성을 제시 :

(lldb) po [[[UIWindow keyWindow] rootViewController] presentedViewController] 
nil 

및 중단 점은 (이론적으로) 상태 복원 후입니다. 하지만 나중에 올바르게 설정됩니다.

+1

일부 코드를 입력하십시오 .. –

+0

실제로 코드가 없습니다. 응용 프로그램 대리자 메서드 만 yes를 반환합니다. 다른 무엇보다도 암묵적으로 작동합니다. –

답변

5

이 문제는 프레임 워크에서 [window makeKeyAndVisible]이라고 부르는 스토리 보드로 작업 할 때 발생하며 복원 후 발생합니다.

당신은 application:willFinishLaunchingWithOptions에 다음 줄을 추가하는 경우 :

[self.window makeKeyAndVisible]; 

그것을 해결됩니다.

+0

그게 내가 가진 문제 였어. 빠르고 쉬운 수정. –