2013-08-19 3 views
1

기본 설정이 있는지 확인한 다음 데이터를 동기화하는 로그인보기가 있습니다. 기본 설정이 없으면 뷰는 사용자가 로그인 할 때까지 대기합니다. 설정이 있고 데이터가 올바르게 동기화되면 내 분할보기로 전환되어야합니다.iOS 스위치 rootViewController가 작동하지 않습니다.

코드는 사용자가 로그인 정보를 입력하면 작동합니다. 데이터를 동기화 한 다음보기를 전환합니다. 사용자가 이미 로그인 한 경우 기능을 수행하고보기를 전환하지 않습니다. "@ 리디렉션"

-(void)redirect{ 
    NSLog(@"[email protected]"); 
    UISplitViewController *split = [self.storyboard instantiateViewControllerWithIdentifier:@"orders_split"]; 
    [self.view.window setRootViewController:split]; 
} 

사용자가 이미 한 번 로그인 한 경우 초기로드의 로그에 보여줍니다

다음은 두 경로에 의해 호출되는 코드입니다. 동기화 오류가 없다는 것을 확인했습니다. 기능을 수행하지만 스위치를 수행하지 않습니다.

nav 컨트롤러가있는 표준보기에서 splitview로 이동 중이므로 수동 segue 트리거를 사용할 수 없습니다. 내가 애니메이션을 함께 할 내 프로젝트에

UISplitViewController *split = [self.storyboard instantiateViewControllerWithIdentifier:@"orders_split"]; 
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 
appDelegate.window.rootViewController = split; 

:

답변

12

앱 대리자를 사용하려고

+(void)setRootController:(UIViewController*)controller 
       storyboard:(UIStoryboard*)storyboard{ 

      MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 

      [UIView 
      transitionWithView:appDelegate.window 
      duration:0.5 
      options:UIViewAnimationOptionTransitionCrossDissolve 
      animations:^(void) { 
       BOOL oldState = [UIView areAnimationsEnabled]; 

       [UIView setAnimationsEnabled:NO]; 

       appDelegate.window.rootViewController = controller; 

       [UIView setAnimationsEnabled:oldState]; 
      } 
      completion:nil]; 
} 
+0

네는이에 확장, 내 생각 엔 당신의 예에서'self.view .window'는 0이 아니므로 아무 것도하지 않습니다. 디버거로 확인하고 실제로 응용 프로그램 창에 대한 포인터가 있는지 확인하십시오. – Idles

+0

나는 self.view.window에 대해서도 문제가 있다고 생각했다. 이것은 완벽하게 작동했습니다. 감사! –

+0

@TylerKiser 당신은 환영합니다 –