Если это важно: - Я использую раскадровки - Базовые данные - xcode 4.6
В моем приложении есть UITableViewController для определенного представления. В этом представлении, если пользователь нажимает кнопку, программное обеспечение проходит через несколько процессов, в ходе которых данные загружаются из Интернет-API и сохраняются в основных данных. Я уверен, что это пожиратель ресурсов, поэтому я пытаюсь завершить эти процессы в отдельных потоках.
Примечание: - Существует порядок операций, поскольку этапы зависят от обменов. Обмены зависят от расы и позиций. Позиции зависят от расы. В противном случае я бы выполнил все асинхронно.
Проблемы: - Я впервые работаю с Grand Central Dispatch. Я не уверен, что делаю это правильно. - Если я закомментирую обработку данных, UIProgressView будет виден и обновится, как и ожидалось. С обработкой данных система кажется слишком загруженной, чтобы даже отображать UIProgressView.
Методы управления загрузками и прогрессом приведены ниже.
- (IBAction)downloadNow:(id)sender {
[progressView setHidden:NO];
[progressView setProgress:0.1 animated:YES];
dispatch_sync(backgroundQueue, ^(void){
[self saveRace];
[self updateProgress:0.2];
});
dispatch_sync(backgroundQueue, ^(void){
[self savePositions];
[self updateProgress:0.3];
});
dispatch_sync(backgroundQueue, ^(void){
[self downloadExchanges];
[self saveExchanges];
[self updateProgress:0.4];
});
dispatch_sync(backgroundQueue, ^(void){
[self downloadLegs];
[self saveLegs];
[self updateProgress:0.5];
});
dispatch_sync(backgroundQueue, ^(void){
Utilities *utilities = [[Utilities alloc] init];
[utilities calculateStartTimes:race with:managedObjectContext];
[self updateProgress:1.0];
});
}
- (void)updateProgress:(double)completedPercentage { if (completedPercentage == 1.0) { [self goHome]; } else if ([importExchanges count] > 0) { [progressView setProgress:completedPercentage анимированные:YES]; } }
Любая помощь приветствуется.