У меня возникли проблемы с отображением хода более длительного действия mainthread (должно быть в основном потоке).Состояние UIButton и ход селектора
Действие вызывается нажатием кнопки.
-(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;
}
...
}
в Funktion generateCSVExportForMonth:
я обновление прогресса _progressView.progress = newValue
.
я сейчас имею 2 проблемы:
1) при нажатии на кнопку, которая вызывает getCSVExport:
кнопка остается подсвеченным, пока вызов не будет завершен. 2) progressView никогда не появляется, не говоря уже об обновлении.
информация: вызов занимает от 0,5 до 2 секунд в зависимости от устройства.
любые идеи, в которых я ошибся?
// EDIT: новая версия с 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
вызова.
Моя проблема заключается в том, что метод, генерирующий файл csv, обращается к coredata. Из-за этого у меня были тупики из-за этого и они хотят избежать этого. позволяя пользователю ждать максимум 2 секунды один раз за всю жизнь приложения - отчет никогда не будет воссоздан, но сохранен и повторно использован - это был мой план обеспечения стабильности. другим способом является то, что мне нужно будет убедиться, что приложение остается в одном и том же месте (viewcontroller) до тех пор, пока отчет не будет создан, потому что он будет использоваться именно там:/если есть умный способ сделать это, я был бы рад, поскольку хорошо :) –
Постоянно ли это связано с объектами Cora Data? Не можете ли вы просто получить нужные вам объекты и передать их в парсер в фоновом режиме? – DrummerB
отчет принимает точно 5+ (numberOfDaysOfMonth) выборки, постоянно распространяемые по выполнению функции. Захваты сильно различаются между выборками объектов и объектов. из-за утомительной сортировки результатов получить все сразу было бы большой потерей производительности. –