2016-06-27 3 views
0

내가 가지고 탐색 컨트롤러 (NC) 다음과 같은 탐색 패턴 세 ViewControllers (A, B, C) :풀림 대표는 "중간"보기를 deinit하지 않습니다

NC->A->B->C 

것은 내가 A에서 이동하는 경우 C와 'back'B와 C 모두가 호출됩니다.

해제 해제 Segue를 C에서 A로 이동하면 B가 호출되지 않습니다.

이유가 명확하지 않은 이유는 무엇입니까? '내'또는 '긴장 풀기'작업과 상관없이 내 앱과 다른 장치에서 비슷한 시퀀스가 ​​호출되고 호출됩니다.

무엇이 B를 '생존'상태로 만들 수 있었는지 아는 것이 있습니까?

+2

해당 컨트롤러와의 강력한 참조주기가 있는지 확인하십시오. 타이머 반복? 어떤 비 -weak' 델리게이트 참조? 'self'를 참조하는 클로저 (그러나'weak' 또는'unowned self'를 지정하는 것을 무시합니다) 인 속성은 무엇입니까? 등 – Rob

+0

문제가있는보기는 SearchController가있는 간단한 UTTableViewController입니다. viewWillDisappear에서 SearchController를 active = false, searchResultsUpdater = nil로 설정하고 부모 뷰에서 제거합니다. 폐쇄가 없습니다. 내가 추가 한 다른 대표자들. 내가 얻는 가장 가까운 것은 네비게이션 컨트롤러에 대한 로컬 참조를 지정하는 것이지만, 끝내자 마자 바로 nil로 설정됩니다. – goggelj

답변

1

발견. 워드 프로세서

definesPresentationContext = true 

: 를 결정 부모 뷰 컨트롤러의 뷰 타입 UIModalPresentationCurrentContext의 프리젠 테이션을 통해 제시해야하는 문제는 내가있는 viewDidLoad에서 한이 라인입니다. 조상보기 컨트롤러에이 플래그가 설정되어 있지 않으면 발표자는 루트보기 컨트롤러가됩니다.

결과적으로 '중간'보기 ('B')는 '뒤로'작업으로 해제하지 않는 한 루트가됩니다.

두번째보기 C에 분할하기위한 검색 창을 계속 표시하는 것을 피하기 위해서, 난 (행에 탭) 사용자 선택에서 선택된 값을 획득 후 뷰 B 의 prepareForSegue에 searchController.active = false 첨가.