2016-06-01 5 views
0

Я пытаюсь отобразить данные на диаграмме с помощью JBChartView и Objective C. Когда я пытаюсь загрузить данные из моего NSDictionary в массив, который отображает данные на моей диаграмме, данные не отображаются. Однако, когда я помещаю фиктивные данные, это отображается, поэтому это проблема между моим NSDictionary. В моем словаре есть информация, я могу это подтвердить. Вот мой код:NSMutableArray не отображает данные на диаграмме

NSMutableArray *mutableChartData = [NSMutableArray array]; 
    if([PFUser currentUser]){ 
     PFQuery *query = [PFQuery queryWithClassName:@"Hours"]; 
     [query whereKey:@"user" equalTo:[PFUser currentUser]]; 
     [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
      for (PFObject *object in objects) { 
       [mutableChartData addObject:object[@"Jan"]]; 
       [mutableChartData addObject:object[@"Feb"]]; 
       [mutableChartData addObject:object[@"Mar"]]; 
       [mutableChartData addObject:object[@"Apr"]]; 
       [mutableChartData addObject:object[@"May"]]; 
       [mutableChartData addObject:object[@"Jun"]]; 
       [mutableChartData addObject:object[@"Jul"]]; 
       [mutableChartData addObject:object[@"Aug"]]; 
       [mutableChartData addObject:object[@"Sep"]]; 
       [mutableChartData addObject:object[@"Oct"]]; 
       [mutableChartData addObject:object[@"Nov"]]; 
       [mutableChartData addObject:object[@"Dec"]]; 
      } 
     }]; 
    } 

    _chartData = [NSArray arrayWithArray:mutableChartData]; 
    _monthlySymbols = [[[NSDateFormatter alloc] init] shortMonthSymbols]; 
    [self.barChartView reloadData]; 

enter image description here

+0

Вы пробовали поставить точку останова в заявлении после назначения _chartData? Если да, то заполняется _chartData? –

+0

Вы перезагружаете диаграмму задолго до того, как получите свои данные. Извлечение данных является асинхронным. – rmaddy

ответ

2
NSMutableArray *mutableChartData = [NSMutableArray array]; 
if([PFUser currentUser]){ 
    PFQuery *query = [PFQuery queryWithClassName:@"Hours"]; 
    [query whereKey:@"user" equalTo:[PFUser currentUser]]; 
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
     for (PFObject *object in objects) { 
      [mutableChartData addObject:object[@"Jan"]]; 
      [mutableChartData addObject:object[@"Feb"]]; 
      [mutableChartData addObject:object[@"Mar"]]; 
      [mutableChartData addObject:object[@"Apr"]]; 
      [mutableChartData addObject:object[@"May"]]; 
      [mutableChartData addObject:object[@"Jun"]]; 
      [mutableChartData addObject:object[@"Jul"]]; 
      [mutableChartData addObject:object[@"Aug"]]; 
      [mutableChartData addObject:object[@"Sep"]]; 
      [mutableChartData addObject:object[@"Oct"]]; 
      [mutableChartData addObject:object[@"Nov"]]; 
      [mutableChartData addObject:object[@"Dec"]]; 
     } 
    _chartData = [NSArray arrayWithArray:mutableChartData]; 
    _monthlySymbols = [[[NSDateFormatter alloc] init] shortMonthSymbols]; 
    [self.barChartView reloadData]; 
    }]; 
} 

Попробуйте это. Вы всегда должны перезагружать таблицу ПОСЛЕ получения данных. Вы извлекаете данные в фоновом потоке, поэтому после получения информации вы должны перезагрузить таблицу, сразу после цикла for и внутри блока.

+0

Этот ответ является лишь частично правильным. Вероятно, вы должны вызывать 'reloadData' на диаграмме из основной очереди, а не в фоновом режиме. – rmaddy

+0

reloadData автоматически запускается в основной очереди, даже при вызове из дочернего фонового потока. – Dexter

+0

Хорошо, тогда нет проблем в этом случае. – rmaddy

Смежные вопросы