Используйте NSTimer для задержки отображения подпредставления, но не удалось - PullRequest
0 голосов
/ 16 декабря 2011

В подробном представлении в 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, приветствие будет отображаться ОТЛИЧНО.

Какую процедуру я сделал не так ...?

1 Ответ

0 голосов
/ 16 декабря 2011

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