Как показать progressBar при импорте данных в CoreData? - PullRequest
0 голосов
/ 20 ноября 2010

Я импортирую большое количество данных в CoreData.Я хочу показать прогресс-бар для прогресса импорта.

Сначала я показываю индикатор выполнения.Затем я считаю данные, которые я хочу импортировать.Затем я настраиваю цикл for:

  • . В этом цикле for я сначала устанавливаю объект coreData.
  • , затем увеличиваю представление прогресса.* После этого цикла я сохраняю объект coreData и скрываю прогрессбар.
    [self.progressView show];
    
    int allFiles = [file count];
    int currentFile = 1;
    
    for(NSString *trackid in file) {
        [entidyDesc setName:[track objectForKey:@"theKey"]];
        float progress = [self convertAmountForProgressBar:currentFile maxNum:allFiles];
        self.progressView.progressBar.progress = progress;
    }
    
    [self.progressView hide];
    [self.managedObjectContext save:nil];
    

    (упрощенно)

    Проблема в том, что progressBar не обновляется.Показывается, но сначала обновляется после завершения цикла for, а затем скрывается.Таким образом, индикатор выполнения отображается только вскоре после цикла for.

    Есть идеи, как решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 21 ноября 2010

Выполните импорт в другой поток и отправьте информацию о ходе выполнения в основной поток с помощью -[NSObject performSelectorOnMainThread:withObject:waitUntilDone:].

Получайте удовольствие от отладки проблем параллелизма.

Вы также можете сделать что-то ужасное с CATransactions, но у меня сложилось впечатление, что UIKit должен справиться со всем этим для вас.

0 голосов
/ 21 ноября 2010

Вы пробовали включить многопоточную анимацию с:

- (void)setUsesThreadedAnimation:(BOOL)flag

Подробнее в документации Apple .

...