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