2011-10-11 5 views
3

포인터를 얻기 위해 어떻게 분명히 뭔가가있어 ... 내 iOS 앱에서아이폰 OS : 탐색 컨트롤러

, 내가 탐색 컨트롤러 위에있는 UIViewController를 밀어 :

잘 표시 MyViewController
MyViewController *mvc = [[MyViewController alloc] initWithNibName:@"MyViewController"]; 
[self.navigationController mvc animated:YES]; 

, 탐색 막대를보고 사용할 수 있지만 내보기 컨트롤러 내에서 내비게이션 컨트롤러로 다시 포인터를 가져 오려고하면 아무런 결과도 얻지 못합니다.

UINavigationController *nav = [self navigationController]; 
if (!nav) { 
    NSLog(@"no nav"); 
} 

나는 하루 종일 머리를 때리고 있었지만 잘못하고있는 것을 볼 수는 없습니다. Xcode에 경고 나 오류가 표시되지 않습니다. 완전히 빠진 것이 있습니까?

TIA : 존

답변

9

navigationControllerviewDidLoad 제대로 설정되지 않습니다. viewDidAppear 또는 나중에 확인해야합니다. 어떤 방법으로 [self navigationController]에 전화 하시겠습니까?

이 이유는 viewDidLoad이 호출 될 때 UINavigationController이 여전히 pushViewController:animated: 메서드를 처리하고 있기 때문입니다. 컨트롤러의 view을으로 초기화 한 후에 navigationController 속성을 으로 설정하는 것으로 보입니다. 시간이 viewWillAppear 일 때 속성이 설정되었는지는 기억할 수 없지만 반드시 viewDidAppear으로 설정해야합니다.

+0

Ah! 당연하지. 그게 문제라고. 나는 너무 일찍 이니셜 라이저에서 확인하고있다. 이런! 불쌍한 머리를 구 해주셔서 감사합니다! – John

0
id rootViewController = [[[[[UIApplication sharedApplication] keyWindow] subviews] objectAtIndex:0] nextResponder];