2011-12-16 2 views
0

UISplitView의 상세보기에서 하위보기를 UINavigationController의 하위보기에 추가하려고합니다.NSTimer를 사용하여 하위보기 표시를 지연했지만 실패했습니다.

애니메이션을 사용하여 세부 정보보기를 희미하게하기 때문에 하위보기로드를 지연 시키려면 NSTimer *delayTimer을 사용합니다.

delayTimer = [NSTimer scheduledTimerWithTimeInterval:1.3 target:self 
selector:@selector(loadWelcomeView) userInfo:nil repeats:NO]; 

내가 추가 할 뷰는

- (void) loadWelcomeView 
{ 
    NSLog(@"Welcome View Loaded."); 
    welcomeViewController = [[WelcomeView alloc] 
         initWithNibName:@"WelcomeView" bundle:nil]; 
    [self.navigationController addChildViewController:welcomeViewController]; 
} 

welcomeview이라고하지만이 프로그램을 실행 기다렸다 때, 그것은 완전히 비어 있습니다!

그러나 메시지 Welcome view loaded.은 디버그 창에 표시됩니다.

NSTimer 대신 [self loadWelcomeView];을 사용하면 웰컴 뷰가 완벽하게 표시됩니다.

어떤 절차를 잘못 했습니까? ...?

답변

0

UI 스터프가 메인 스레드에서 발생해야하므로 NSTimers에서 발생할 수있는 스레딩 문제를 배제합시다. 다음을 시도하십시오.

- (void) loadWelcomeViewWithinMainThread 
{ 
    NSLog(@"Welcome View Loaded."); 
    welcomeViewController = [[WelcomeView alloc] initWithNibName:@"WelcomeView" bundle:nil]; 
    if(welcomeViewController) 
    { 
     if(self.navigationController) 
     { 
      [self.navigationController addChildViewController:welcomeViewController]; 
     } else { 
      NSLog(@"navigationController is null"); 
     } 
    } else { 
     NSLog(@"welcomeViewController is null"); 
    } 
} 

- (void) loadWelcomeViewWithinMainThread { 
    [self performSelectorOnMainThread: @selector(loadWelcomeViewWithinMainThread) withObject: nil waitUntilDone: YES]; 
}