2009-04-05 4 views
0

viewDidLoad :의 self.navigationController에 액세스하는 UIViewController 하위 클래스가 있습니다. 뷰 스택에있는 위치에 따라 navigationController를 얻거나 nil을 얻습니다.스택 위치에 따라 self.navigationController에 다른 값 (nil 및 non-nil)이 있습니다.

내 스택이 "RootViewController -> MyViewController"인 경우 유효한 포인터를 얻습니다.

내 스택이 "RootViewController -> AnotherViewController -> MyViewController"이면 스택이 없습니다. 두 경우 모두

는 MyViewController 함께 스택으로 푸시되고있다 :

[self.navigationController pushViewController:self.myViewController 
          animated:YES]; 

난에서 잘 작동 MyViewController 위의 스택에 또 다른의 ViewController를 밀어 할 수 있어야하기 때문에, 나를 붙어있다 첫 번째 경우에는 실패하지만 두 번째 경우에는 분명히 실패합니다.

답변

0

UIViewController의 self.navigationController는 UIViewController가 UINavigationController의 스택 내에 존재하는 한 항상 적절한 UINavigationController를 반환하도록 설계되었습니다. 이것은 아마도 단순한 코딩 오류가 훨씬 더 복잡한 것으로 가장하고있는 곳에서 내가 원하는 것보다 더 자주 나 자신에게로 들어가는 것 중 하나 일 것입니다. 이러한 경우에는 대개 행운을 빌어 완전히 새로운 Xcode 프로젝트를 설정하여 문제를 재현하는 데 필요한 최소한의 코드와 간과하지 않는 것보다 더 많은 시간을 간과하여 간과 된 부분에 대한 수정 사항을 찾아 주 프로젝트에 쉽게 적용 할 수 있습니다 . 미안 해요 더 구체적인 내용을 제공 할 수 없지만 설명하는 내용이 Cocoa Touch 프레임 워크의 디자인에 위배되는 것으로 보입니다. 문서에 따라 엄격하게 작성된 최소한의 Xcode 프로젝트에서이를 재현 할 수 있다면 애플에게 버그 리포트를 제출하는 것이 좋다. 다행히도 당신이 간과하고있는 간단한 것을 발견 할 것이지만 몇 분 안에 스스로를 걷어차기를 =)

+0

이것은 본질적으로 문제였습니다. 양날의 검을 삼키고있는 메시지. :) 며칠간 쉬고 돌아와서 이런 문제를 발견하는 것은 놀랍도록 유용합니다. –

0

내가 보통하는 일은 UIViewController를 서브 클래스 화하고 navigationController를 설정하는 방법을 추가하는 것입니다. 읽기/쓰기로하지 않는 이유는 없습니다. 특히 동일한 스택에 있어도 애플 클래스가 navigationController (또는 그 문제에 대해 parentController)를 설정하지 않기로 결정할 빈도를 고려해야합니다.

관련 문제