2013-03-08 1 views
4

У меня есть функция, которая запускается каждые 5 секунд, чтобы проверять наличие новых сообщений, если запускается новое сообщение. Я обновляю значение значка элемента панели вкладок, используя приведенный ниже код.Задержка при обновлении Tab Bar Значок элемента Значения

NSString *chkUrl = @"http://domain.com/script.php"; 
    NSURL *url = [[[NSURL alloc] initWithString:chkUrl] autorelease]; 
    NSError *error = nil; 
    NSStringEncoding encoding; 
    NSString *returnHTML = [[NSString alloc] initWithContentsOfURL:url usedEncoding:&encoding error:&error]; 

    int totalNewMessages = [[returnHTML stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] intValue]; 
    AppDelegate *mainDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

    NSLog(@"badge before:%@",[[mainDelegate.tabBarController.viewControllers objectAtIndex:2] tabBarItem].badgeValue); 
    [[mainDelegate.tabBarController.viewControllers objectAtIndex:2] tabBarItem].badgeValue = [NSString stringWithFormat:@"%d",totalNewMessages]; 
    NSLog(@"badge after:%@",[[mainDelegate.tabBarController.viewControllers objectAtIndex:2] tabBarItem].badgeValue); 

Проблема заключается в том, что значение значка не обновляется немедленно! Возможно, в третьем четвертом звонке он будет обновлен! Ничего плохого я делаю! Или это ошибка в iOS!

Как работа, я повторял вышеприведенную строку 10 раз при каждом обновлении, но опять же она не обновляется, поэтому проблема заключается в задержке обновления значения значка, это не вопрос повторного запуска строки обновления!

Кстати, эта проблема имеет место и в Xcode 4.6 Simulator & моего iPhone 5 с прошивкой 6.1

+0

Почему бы вам не установить контрольную точку для проверки значения totalNewMessages, чтобы узнать, что передается на ваш значок? Возможно, у вас есть асинхронные звонки? Как вы получаете стоимость на первом месте? – Alladinian

+0

@Alladinian. Я печатаю значение значка до и после его обновления, оно показывает правильное значение в NSLog, но оно задерживается на несколько секунд в значке элемента табуляции. – DeZigny

+0

Можете ли вы опубликовать часть кода, где вы задаете значение 'totalNewMessages'? – Alladinian

ответ

3

Я нашел проблему :)

Моей функции, которая работает через каждые 5 секунд находившуюся ниже коды

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 
             (unsigned long)NULL), ^(void) { 
    [self checkNewMessages]; 
}); 

Когда я изменил его на нижний, он работал как шарм!

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self checkNewMessages]; 
    }); 
});