iOS - Тема и оповещение - PullRequest
0 голосов
/ 03 августа 2011

У меня есть приложение, которое при запуске управления обновлениями и другими вещами.Если приложение найдет обновления, они спросят пользователя, нужно ли делать эти обновления.Если пользователь выбирает ДА, я хочу, чтобы на главном экране отображался счетчик до завершения обновления.Но когда я нажимаю ДА, мой вид предупреждений не исчезает и остается на экране до завершения обновления.Можно ли создать поток, который запускается в основном потоке и останавливается после завершения обновления?Спасибо

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {

    if (buttonIndex==1) {
        [self showActivityViewer];
        [self downloadControlAndUpdatePoi];
        [self downloadControlAndUpdateItinerari];
        [self downloadControlAndUpdateArtisti];
        [self downloadControlAndUpdateEventi];
        [self hideActivityViewer];
        NSLog(@"AGGIORNA");
    } else {
        NSLog(@"NON AGGIORNARE");
        return;
    }
}

1 Ответ

0 голосов
/ 03 августа 2011

Если методы

    [self downloadControlAndUpdatePoi];
    [self downloadControlAndUpdateItinerari];
    [self downloadControlAndUpdateArtisti];
    [self downloadControlAndUpdateEventi];

выполняются синхронно (это означает, что они возвращаются только после полной обработки), поэтому:

     [self hideActivityViewer];

выполняется только в самом конце.

Простой подход к этому - планирование выполнения ваших методов в главном потоке:

 [self performSelector:@selector(downloadControlAndUpdatePoi) withObject:nil afterDelay:0];
 ....
 [self hideActivityViewer];

, чтобы эти методы выполнялись только после того, как управление вернулось в основной цикл и обновился пользовательский интерфейс.

В противном случае вы можете использовать:

+ detachNewThreadSelector:toTarget:withObject:

из NSThread , чтобы сделать более или менее то же самое. В этом случае я бы предложил создать метод-оболочку для всех ваших методов dowloadAndUpdate..., но имейте в виду, что вы не можете обновить пользовательский интерфейс из вторичного потока.

В обоих случаях вам следует позаботиться о синхронизации операций download... с остальной частью вашего рабочего процесса после удаления представления предупреждений.

...