2011-08-11 3 views
2

뷰 기반 응용 프로그램으로 새 xcode 프로젝트를 만들었으며 UINavigationController (s) 안에 사용할 UIViewController (s) 세트가 있습니다.self.navigationController가 RootViewController로 할당 된 후 null입니까?

NSMutableArray *navControllers = [[NSMutableArray array]; 
for (id aVC in self.myViewControllers) { 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:aVC]; 

    //[aVC setNavigationController:navController]; 
    [navController setNavigationBarHidden:YES]; 
    [navController setToolbarHidden:YES]; 
    [navControllers addObject:navController]; 
    [navController release]; 
} 

_navigationControllers = [[NSArray arrayWithArray:navigationControllers] retain]; 

_navigationControllersParentViewController의 구성원으로 유지됩니다, 그래서가 루프 내부의 시작 내 모든 네비게이션 컨트롤러를 가정 유지 : 모든 UINavigationController (들) 및 모든 myViewControllers가 시작된 후 이전 ParentViewController.m에서

_navigationControllers에 의해 그래서 그들은 공개 또는 nil 될,하지만 난 SomeOtherViewController을 밀어 MyViewController에있는 navigationController를 사용하려고하면, 그것은 작동하지 않습니다되지 않습니다 :

- (IBAction)pushDetailView { 
    [self.navigationController pushViewController:self.detailViewController animated:YES]; 
} 

pushViewController:someOtherViewController 앞에 중단 점을 넣고 "po [self navigationController]"라고 콘솔에 알려 주면 nil 참조입니다.

은 내가 [[UINavigationController alloc] initWithRootViewController:aVC]을 수행 할 때 애플 'iOS 용보기 컨트롤러 프로그래밍 가이드 " rootControllernavigationController를 지정하지 않고 동일한 않기 때문에, 기본 메커니즘은, aVC.navigationControllernavigationController을 할당한다고 가정한다.

루프 용 두 번째 줄의 표시를 취소하지 않으면 //[aVC setNavigationController:navController];navigationController이 AVC에 존재하지 않습니다.

나는 메커니즘을 오해하고 있습니까? 저의 경우 다른 해결책이 있습니까? 미리 감사드립니다.

+0

parent.h 파일에서 _navigationController에 대한 속성 선언을 표시 할 수 있습니까? 질문에 대한 귀하의 모든 가정/논리가 괜찮은 것 같습니다 (예 : initWithRootViewController가 루트보기 컨트롤러에서 navigationController 속성을 자동으로 설정해야 함) – gamozzii

답변

-1
_navigationControllers = [NSMutableArray array]; 
for (id aVC in self.myViewControllers) { 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:aVC]; 

    //[aVC setNavigationController:navController]; 
    [navController setNavigationBarHidden:YES]; 
    [navController setToolbarHidden:YES]; 
    [navControllers addObject:navController]; 
} 

// assuming index 0 navigation controller is with 'ParentViewController' 
self.rootViewController = [_navigationControllers objectAtIndex:0]; 

이것을 확인하십시오.

관련 문제