使用NSTimer延迟子视图显示但失败

时间:2011-12-16 18:40:03

标签: xcode uisplitviewcontroller nstimer delay detailview

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 :(得分: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];
}