2010-11-20 3 views
0

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

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

  • В этом цикле я сначала установил объект coreData.
  • затем я увеличиваю прогресс.

После этого цикла я сохраняю объект coreData и скрываю progressBar.

[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

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

Удачи в вопросах параллелизма при отладке.

Возможно, вы также можете сделать что-то страшное с помощью CATransactions, но у меня создается впечатление, что UIKit должен обрабатывать все из них для вас.

+0

+1 Пользовательский интерфейс находится на передней панели. Любой длинный процесс на передней нити, как большой цикл, заморозит пользовательский интерфейс, пока он не завершится. – TechZen

0

ли вы попробовать включить резьбовую анимацию:

- (void)setUsesThreadedAnimation:(BOOL)flag 

Больше в компании Apple documentation.

+0

О, извините, я должен сказать, что я развиваюсь на ios. есть ли аналогичные вещи на ios? – choise