开发者

UITabBar appearance problem + NSThreads

I'm having a problem when trying to add a UITabBar as a subview of my AppDelegate's window. The link above shows a screenshot of the messy state of the screen.

TabBarInAMessyState.png

The results are unpredictable. In this picture only the UITabBarItem's titles were affected, but sometimes the TabBar background is not shown (consequently we can see the window's background). Sometimes the NavigationBar is also affected (not show in this picture).

When I start the Application I first have to check if there's network connection, so It is called a method (verifyNetworkAvailability:) that will run in a thread different from the main thread. This is done in order not to freeze the application.

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

I'd like to开发者_运维百科 know if it is possible to add the tabBarController.view in this way (by a method call done in thread other than the main thread).

Thanks in advance


Try this

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

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


UIKit has some trouble when you try to access it from any thread but the main thread. Think about dispatching a notification to have your primary app thread to add the view rather than adding the view directly in your secondary thread.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜