Итак, я, хотя я наконец-то откос прошивки развития, а затем я сталкиваюсь это ....Раскадровка интерфейс не обновляется сразу
Так что я пытаюсь создать приложение для здоровья, который использует набор здоровья для импорта некоторые из данных пользователя, а затем обрабатывают его различными способами и так далее.
После выполнения первоначального импорта я просматриваю каждую точку данных для анализа данных на нем. За это время, которое составляет около 7 секунд, у меня есть индикатор выполнения пользовательского интерфейса, который должен обновляться и заканчиваться по мере обработки данных. Когда обработка завершена, у меня также есть некоторые UILabels, которые должны обновляться.
Ни один из элементов пользовательского интерфейса Я не добавляю обновления до тех пор, пока после завершения обработки не появится длинное (> 5 секунд) и случайное (до 60 секунд).
Я знаю из утверждений NSLog, что обработка завершается правильно и что переменные, которые должны обновить индикатор выполнения и метки, верны.
Телефон действительно испытывает высокую загрузку ЦП в течение этого времени обработки, поэтому я задаюсь вопросом, может ли это быть связано.
После получения доступа к данным сердечного ритма в методе viewdidload, метод readHeartRateData называется, его затем обрабатывает отдельно, как следующее:
-(void)readHeartRateData {
NSLog(@"Read Heart Rate Data");
HKQuantityType *heartRate = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate];
NSSortDescriptor *timeSortDescriptor = [[NSSortDescriptor alloc] initWithKey:HKSampleSortIdentifierEndDate ascending:NO];
// construct the query & since we are not filtering the data the predicate is set to nil
HKSampleQuery *query = [[HKSampleQuery alloc] initWithSampleType:heartRate predicate:nil limit:1000000 sortDescriptors:@[timeSortDescriptor] resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error) {
NSInteger dataPoints = results.count;
self.data1.text = [NSString stringWithFormat:@"Total Data Points Collected: %lu", dataPoints];//Does not update straight away
for (int i=0; i<dataPoints; i++) { // The 'processing' bit
float value1 = (unsigned long)dataPoints;
float progress = (i/value1);
[self.progressView setProgress:progress animated:YES];// No update until after process finished
HKQuantitySample *quantitySample = [results objectAtIndex:i];
NSDate *date = quantitySample.startDate;
NSDateFormatter *timeFormatter = [[NSDateFormatter alloc]init];
timeFormatter.dateFormat = @"HH";
NSString *dateString = [timeFormatter stringFromDate: date];
int check = [dateString intValue];
if(check > 0 && check < 8){
nightCount = nightCount + 1;
HKUnit *beatsPerMinute = [[HKUnit countUnit] unitDividedByUnit:[HKUnit minuteUnit]];
HKQuantity *data = quantitySample.quantity;
double dataValue = [data doubleValueForUnit:beatsPerMinute];
nightTotal = nightTotal + dataValue;
}
}
NSLog(@"Number of Night Data Points: %li", (long)nightCount);
nightAverageRate = nightTotal/nightCount;
NSLog(@"Average Night Heart Rate: %li",(long)nightAverageRate);
self.data4.text = [NSString stringWithFormat:@"Total Night-time Data Points: %lu", (long)nightCount];
self.data5.text = [NSString stringWithFormat:@"Average Night-time BPM: %li", (long)nightAverageRate];
// if there is a data point, dispatch to the main queue
if (results) {
dispatch_async(dispatch_get_main_queue(), ^{
// NSDate *startDate, *endDate;
});
}
}];
// do not forget to execute the query after its constructed
[healthStore executeQuery:query];
}
Любые предложения о том, почему существует эта случайная задержка после того, как обработка данных закончена прежде чем он обновит метки пользовательского интерфейса и представление прогресса? Загрузка процессора высока с самого начала, но падает, как только обработка завершена. Большое спасибо за чтение
Thats great, есть ли способ вызвать перерисовку экрана? – simbo64
Да, но это не способ решить вашу проблему. Вы всегда должны обновлять пользовательский интерфейс из основной очереди. – chedabob