UITabBar外观问题+ NSThreads

时间:2009-11-06 19:32:47

标签: iphone uitabbar nsthread

我在尝试添加UITabBar作为AppDelegate窗口的子视图时出现问题。 上面的链接显示了屏幕凌乱状态的屏幕截图。

TabBarInAMessyState.png

结果无法预测。在这张图片中,只有UITabBarItem的标题受到影响,但有时候没有显示TabBar背景(因此我们可以看到窗口的背景)。有时导航栏也会受到影响(此图片中未显示)。

当我启动应用程序时,我首先要检查是否存在网络连接,因此它被称为一个方法(verifyNetworkAvailability :),它将在与主线程不同的线程中运行。这样做是为了不冻结应用程序。

- (void)applicationDidFinishLaunching:(UIApplication *)application {
        [window makeKeyAndVisible];

        // check if there's network connection in another thread
        [NSThread detachNewThreadSelector: @selector(verifyNetworkAvailability:) toTarget:self withObject:self];
    }

    - (void) verifyNetworkAvailability:(MyAppDelegate*) appDelegate {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

        // Check if there's network connection..
        // If so, call the verifyNetworkAvailabilityDidEnd method 
        [appDelegate verifyNetworkAvailabilityDidEnd];

        [pool release];
    }

    - (void) verifyNetworkAvailabilityDidEnd {
        [window addSubview:tabBarController.view];
    }

我想知道是否可以用这种方式添加tabBarController.view(通过在主线程以外的线程中完成的方法调用)。

提前致谢

2 个答案:

答案 0 :(得分:0)

当您尝试从任何线程(主线程)访问它时,UIKit会遇到一些麻烦。考虑调度通知以让您的主应用程序线程添加视图,而不是直接在辅助线程中添加视图。

答案 1 :(得分:0)

试试这个

- (void) verifyNetworkAvailability:(MyAppDelegate*) appDelegate {
    // other code here ...

    [appDelegate performSelectorOnMainThread:@selector(verifyNetworkAvailabilityDidEnd) withObject:nil waitUntilDone:NO];
}