2009-11-06 2 views
2

У меня возникла проблема при попытке добавить UITabBar в качестве подзаголовка моего окна AppDelegate. Ссылка выше показывает скриншот грязного состояния экрана.Проблема внешнего вида UITabBar + NSThreads

TabBarInAMessyState.png

Результаты непредсказуемы. На этом изображении затронуты только заголовки UITabBarItem, но иногда фон TabBar не отображается (следовательно, мы можем видеть фон окна). Иногда NavigationBar также затрагивается (не показано на этом рисунке).

Когда я запускаю приложение, я сначала должен проверить, есть ли сетевое подключение, поэтому он называется методом (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 таким образом (с помощью вызова метода делается в потоке, отличном от основного потока).

Спасибо заранее

ответ

0

Попробуйте

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

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

Спасибо !!! Это сработало отлично !!! –

+0

Добро пожаловать :) – nduplessis

0

UIKit имеет некоторые проблемы при попытке получить к нему доступ из любого потока, но в основном потоке. Подумайте о том, чтобы отправить уведомление, чтобы ваш основной поток приложений добавлял представление, а не добавлял его прямо во вторичный поток.

+0

Я попытался с помощью NSNotificationCenter, но без успеха. См. Сообщение ниже для более подробной информации. –

Смежные вопросы