2017-11-07 6 views
0

내 앱에서 SideMenu 2.3.4를 성공적으로 사용하고 v3.1.4로 업그레이드했습니다. 그때, API의 변화에 ​​적응하는 데 필요한 몇 가지 개조를 만들어 내 응용 프로그램을 실행 - 그것은 다음과 같은 UI 조치 후 추락 : 다른로드 해당 항목에 대한 탐색 모음 버튼을 iOS SideMenu v3.1.4에서 라이프 사이클 메소드를 잘못 호출했습니다.

  • 탭을 눌러

    1. 메뉴를 엽니 다 보기 응용 프로그램이 충돌하기 전에 탐색 모음 버튼을
    2. 탭이 마지막 탭에 대한 응답으로 다시

    메뉴 개설하지 않은 메뉴를 엽니 다 (메뉴가 닫히고 새보기가 나타납니다). 디버거에서 나는 2, viewDidLoad 다음 viewWillAppear 해당 새보기 호출 된 것을 보았다. 3 이후 viewWillDisappear, viewDidDisappear, viewWillAppear 같은 뷰가 호출되었고, 모두 변경되지 않았습니다.

    viewWillAppear에서 충돌이 발생했습니다. 내 코드는 viewDidLoad가 viewDidDisAppear 이후에 호출 된 첫 번째 것이기 때문입니다. AFAIK, viewDidDisappear는 다른 라이프 사이클 메소드를 호출하기 전에 뷰가 닫혀서 다시로드되어야하고 viewDidLoad가 호출되어야한다는 것을 의미하기 때문에이를 의지하는 것이 합당합니다. 즉, viewWillAppear가 호출되지 않아야합니다. viewDidLoad.

    iOS보기 수명주기를 오해하고 있습니까? 이것은 SideMenu 3.1.4의 버그입니까?

    감사합니다,

    마크

  • +0

    'dealloc' 메소드에 일부 코드를 추가하여 뷰 컨트롤러가 메모리에서 제거되는지 확인할 수 있습니다. 그것이 여전히 메모리에 있다면 view가 화면 상에 "로드 된"것이므로'viewDidLoad'는 다시 호출되지 않을 것입니다. Swift Dealloc은 https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Deinitialization.html#//apple_ref/doc/uid/TP40014097-CH19에 문서화되어 있습니다. – JMFR

    답변

    0

    내가 생명주기 메소드를 오해 한 그물 쇼에 대한 문서 및 기사 자세히 읽기. 내가보고 된 충돌을 제거

    if (isBeingDismissed || isMovingFromParentViewController) { 
        // Do something - viewWillAppear will NOT be called before viewDidLoad. 
    } 
    

    :이 viewDidLoad에 (예를 들어, viewDidUnload)의 어떤 반대가 없지만,이 작업을 수행 할 수 있습니다 viewDidDisappear 하나의

    .

    마크