2014-10-16 2 views
2

정말 이상한 일이 있습니다.iOS 8에서 self.presentingViewController가 고장 났습니까?

매우 기본적인 단일보기 프로젝트를 만들고 첫 번째부터 두 번째까지 모달 섹터와 함께 두 번째보기 컨트롤러를 스토리 보드에 추가하십시오. 보기 컨트롤러에서 segue를 시작하고 performSegueWithIdentifier:을 사용하여 프로그래밍 방식으로 트리거하십시오.

<ViewController: 0x7fa8e9530080> 
:이 같은 로그를 얻어야한다,

NSLog(@"%@", self.presentingViewController); 

지금 에 응용 프로그램 아이폰 OS 7을 실행 모달 발표 뷰 컨트롤러의 viewDidLoad에서

,이 로그를 추가

모달 뷰 컨트롤러를 제공하는 앱의 초기보기 컨트롤러에 대한 참조입니다.

지금 아이폰 OS 8똑같은 실행, 당신은 얻을 것이다 :

(null) 

여기 무슨 일이야? 알려진 문제입니까? 물론 두 시스템 모두에서 똑같은 동작을 기대할 수 있습니다.

+0

viewDidLoad를 실제로 초기화에 사용해야합니다.이 단계에서는 수신기의 컨트롤러보기 계층 구조가 탐색 트리에 배치되었음을 보증하지 않습니다. 그게 당신의 의도라면 viewWillAppear 또는 viewDidAppear를 재정의해야합니다. 이전 버전에서는 작동하지만 문서에서는 추가 초기화에 사용해야한다고 명시되어 있습니다. iOS 8에서는 수신자의 초기화가 일찍 수행되는 것처럼 확실히 들립니다. – MDB983

+0

음 .. 말이 되네요. 몇 가지 테스트를 해보고 대답을 – rdurand

+0

@ MDB983으로 바꾸면 알려 드리겠습니다. * viewWillAppear : * 제시된 뷰 컨트롤러가 있습니다. 세트. 답변으로 의견을 보내고 싶다면 동의하게되어 기쁩니다. – rdurand

답변

3

감사 ... 답변으로 공식화되었습니다.

viewDidLoad를 실제로 초기화에 사용해야합니다.이 단계에서는 수신자의 컨트롤러보기 계층 구조가 탐색 트리에 배치되었다고 보장 할 수 없습니다. 그게 당신의 의도라면 viewWillAppear 또는 viewDidAppear를 재정의해야합니다. 이전 버전에서는 작동하지만 문서에서는 추가 초기화에 사용해야한다고 명시되어 있습니다. 확실히 iOS 8에서 수신자의 초기화가 먼저 수행되는 것처럼 들립니다.

관련 문제