2011-12-16 3 views
0

В подробном представлении в UISplitView, я хочу добавить subview к его дочернему представлению UINavigationController.Используйте NSTimer, чтобы задержать отображение в режиме просмотра, но не удалось

Я использую NSTimer *delayTimer, чтобы отложить загрузку детского представления, потому что в режиме детализации с помощью анимации я исчезаю.

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

мнение Я хочу добавить, называется welcomeview

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

Но когда я запустил программу и подождал, она была совершенно пустой !!!

Однако сообщение Welcome view loaded. WAS отображается в окне отладки.

Если я использую [self loadWelcomeView]; вместо NSTimer, приветствие будет отображаться ОТЛИЧНО.

Какая процедура я сделал неправильно ...?

ответ

0

Пользовательский интерфейс должен происходить в основном потоке, поэтому давайте исключаем любые возможные проблемы с потоками, которые могут возникнуть с помощью 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]; 
}