Используйте NSTimer для задержки отображения подпредставления, но не удалось
В подробном виде в UISplitView
Я хочу добавить подпредставление к его UINavigationController
Дитя зрения.
Я использую 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.
БЫЛО отображено в окне отладки.
Если я использую [self loadWelcomeView];
вместо использования NSTimer
, welcomeview будет отображаться ОТЛИЧНО.
Какую процедуру я сделал неправильно...?
1 ответ
Пользовательский интерфейс должен происходить в основном потоке, поэтому давайте исключим любые возможные проблемы с потоками, которые могут возникнуть с 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];
}