2014-04-09 3 views
0

SplitViewController를 사용하는 iPad 앱을 설정 중입니다. 내 애플 대리자에서 나는 didFinishLaunchingWithOptions에 다음이 있습니다SplitViewController의 UINavigationController와 혼동

UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController; 
UINavigationController *leftNavController = [splitViewController.viewControllers objectAtIndex:0]; 
LeftViewController *leftViewController = (LeftViewController*)[leftNavController topViewController]; 
DetailViewController *detailViewController = [splitViewController.viewControllers objectAtIndex:1]; 
NSLog(@"Detail View Ctrl >> %@", [detailViewController class]); 

내가 응용 프로그램을 실행하면, DetailViewController 실제로있는 UIViewController의 하위 클래스 인 NSLog 문 반환 "은 UINavigationController". 그러나 XCode에서 코드 완성은 DetailViewController 하위 클래스에 구현 된 모든 메서드를 보여줍니다. 어떤 아이디어? 감사!

답변

2

DetailViewController가 인데 실제로는 UINavigationController에 포함되어 있고 네 번째 줄에 오류가 있다고 생각합니다. 대신 LeftViewController에서와 마찬가지로 분할보기 컨트롤러 내부의 두 번째보기 컨트롤러에 대해 topViewController을 살펴보십시오.

Xcode가 DetailViewController 메소드의 완성을 계속 제안하는 이유는 그 유형을 부여했기 때문입니다. 코드 완성은 런타임 동작에 의존하지 않습니다 (어떻게 할 수 있습니까?) 대신 입력 한 코드의 정적 분석에 의존합니다. Xcode에 DetailViewController라는 것이 있으면, 그 정보를 기반으로 사용자를 믿고 자동 완성합니다.