2014-07-19 7 views
2

View Controller를 전송하는 데 문제가 있습니다. 이것은 내 AppDelegate에 내 코드 조각입니다 :View 컨트롤러를 올바르게 캐스팅하는 방법

 InitViewController *initVC = (InitViewController *)self.window.rootViewController; 
     VMParentVC *topVC = (VMParentVC *) initVC; 
     [topVC navigateToMain]; 

내가 뭘 내가 내 VMParentVC 클래스의 방법을 사용할 수 있어요 있도록 rootViewController를 캐스팅 할 노력하고있어. 나는이 작업을 수행 할 때, 나는이 오류가 발생합니다 :

는 :

아니 내가 잘못 뭘하는지 확신 "[UINavigationController가이 navigateToMain] 인식 할 수없는 선택기 인스턴스로 전송".

답변

4

이 오류는 사용자가 원하는 정보가 아닌 의 인스턴스에서 -navigateToMain을 호출하고 있다는 것을 의미합니다.

아마도이 문제는 아마도 윈도우의 루트보기 컨트롤러가 UINavigationController 인스턴스이고 찾고있는보기 컨트롤러가 탐색 스택의 첫 번째보기 컨트롤러이기 때문일 수 있습니다. 그것은 당신이 UINavigationController 내부의 첫 번째보기 컨트롤러를보고 싶은 경우라면 :

UINavigationController *navigationController = (UINavigationController*)self.window.rootViewController; 
*topVC = (VMParentVC *) navigationController.viewControllers[0]; 
    [topVC navigateToMain]; 

또한 뷰 컨트롤러는 당신이 당신이 끌어 후해야한다고 생각 클래스의 종류가 실제로 있는지 확인하는 것이 안전 할 것 네비게이션 스택의 내용 :

UINavigationController *navigationController = (UINavigationController*)self.window.rootViewController; 
UIViewController * topVC = navigationController.viewControllers[0]; 

if ([topVC isKindOfClass:([VMParentVC class])]) {  
     [((VMParentVC *)topVC) navigateToMain]; 
}