У меня возникли некоторые проблемы с отображением хода выполнения более длительного действия основного потока (должно быть в основном потоке).
Действие вызывается нажатием кнопки.
-(void)getCSVExport:(id)sender{
...
NSString *filePath = [path stringByAppendingPathComponent:fileName];
NSData *csvData = [NSData dataWithContentsOfFile:filePath];
if (nil == csvData) {
_progressView.hidden = NO;
[self.view bringSubviewToFront:_progressView];
_progressView.progress = 0;
csvData = [self generateCSVExportForMonth:_monthToExportInt];
[csvData writeToFile:filePath atomically:YES];
_progressView.hidden = YES;
}
...
}
внутри функции generateCSVExportForMonth:
я обновляю прогресс с помощью _progressView.progress = newValue
.
у меня сейчас 2 проблемы:
1) при нажатии кнопки вызова getCSVExport:
кнопка остается подсвеченной до завершения вызова. 2) progressView никогда не отображается, не говоря уже о самом обновлении.
информация: вызов занимает от 0,5 до 2 секунд в зависимости от устройства.
есть идеи, где я ошибся?
// РЕДАКТИРОВАТЬ: новая версия с backgroundThread:
[self.view bringSubviewToFront:_progressView];
_progressView.progress = 0;
[self performSelector:@selector(assignCSVData:) onThread:[NSThread new] withObject:csvData waitUntilDone:YES];
_progressView.hidden = YES;
и дорогой по времени звонок:
-(void)assignCSVData:(NSData*)data{
data = [self generateCSVExportForMonth:_monthToExportInt];
}
это приводит к взаимоблокировке при вызове performSelector
.