2015-01-13 4 views
1

큰 프로젝트에서이 문제점이 발생했지만 아주 기본적인 프로젝트로이 문제를 재현 할 수있었습니다. 두 개의 뷰 컨트롤러가있는, 그래서 모두가 위의 클래스를 사용하여 서로를 가리키는 Show Detail segues으로,세부 정보 표시 영역에 호출되지 않음

class ViewController: UIViewController { 
    deinit { 
     println("Deinitializing") 
    } 

    override func viewDidAppear(animated: Bool) { 
     NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "segue", userInfo: nil, repeats: false) 
    } 

    func segue() { 
     self.performSegueWithIdentifier("segue", sender: self) 
    } 
} 

내 스토리 보드가 구성 : 나는 다음 뷰 컨트롤러 클래스가 있습니다. 나는 그들이 앞뒤로 "튀어 오르는"것을 확인할 수있다. 새로운 인스턴스가 매번 표시되고 유지 사이클이 없더라도 이전에 표시된보기 컨트롤러의 deinit 메서드가 호출되지 않습니다.

사용자 지정 구를 사용하여 원하는 동작을 얻을 수 있었지만 제 질문은 다음과 같습니다.

설명서에 내가 예상 한대로 작동해야한다고 나와있는 것처럼 보였습니다. 필자는 테스트 프로젝트에 적용되는 부분을 강조했습니다.

Source

현재는 정보 영역의 내용. 앱이 마스터 및 세부 정보보기를 표시하는 경우 새 콘텐츠가 현재 정보를 대체합니다.앱이 마스터 또는 세부 정보 만 표시하는 경우 콘텐츠가 현재보기 컨트롤러 스택의 상단을 대체합니다.

현재보기 컨트롤러 스택의 맨 위를 바꾸면 현재보기 컨트롤러가 초기화되지 않을 것으로 예상됩니다.

class ExampleSegue: UIStoryboardSegue { 
    override func perform() { 
     let source = self.sourceViewController as UIViewController 
     let destination = self.destinationViewController as UIViewController 

     source.view.window?.rootViewController = destination 
    } 
} 

감사합니다 :

대안이 상세를 참고로

을보기 위해,이 SEGUE 통해 내 원하는 동작을 (공상 아무것도하지 않고, 잘못 될 수있는) 달성 할 수 있었다 어떤 도움이 필요해!

+0

내비게이션 컨트롤러를 사용합니까? 두 번째보기 컨트롤러를 표시하면 첫 번째보기 컨트롤러가 네비게이션 컨트롤러의 속성 인 스택으로 푸시됩니다. 그래서 ... 그것은 부끄럽지 않습니다. –

답변

3

탐색 컨트롤러 또는 분할보기 컨트롤러를 사용하지 않는 경우 "세부 정보 표시"섹 션은 모달 프레젠테이션과 동일합니다. 다른 하나를 표시하는 컨트롤러는 presentViewController 속성에 대한 참조를 유지합니다 (그리고 제시된 컨트롤러는 presentingViewController 속성에 표현 자에 대한 참조를가집니다). 따라서 컨트롤러 중 어느 것도 할당 해제되지 않습니다. 이전 컨트롤러로 돌아가려면 unwind segue를 사용하거나 코드에서 dismissViewControllerAnimated : completion을 사용해야합니다.

+0

네비게이션 컨트롤러가 제공되지 않을 때 "쇼 세부 사항"섹서가 모달 프리젠 테이션의 역할을한다는 것을 알 수 있습니까? 나는 당신이 옳다는 것을 확신합니다. 그것은 내가 보는 행동과 일치하기 때문에, 그러나 그것에 대해 더 많이 읽고 싶습니다. 편집 : 인터페이스 빌더에서 "Show Detail (Replace)"와 같은 Segue를 표시하겠다는 Apple의 결정에서 초기 혼란이 생겼다고 생각합니다. 내 마음을 대체하십시오! = Modal – Arkcann

+0

@Arkcann, 나는 있을지 모르겠습니다. 어떤 참조. 몇 가지 실험을했고, segue가 모달 (커버 세로 애니메이션)처럼 동작하고, renderedViewController 및 presentingViewController 속성이 segue 후에 non-nil이라는 것을 알았습니다. – rdelmar