【问题标题】:NSMutableArray Not Displaying Data On ChartNSMutableArray 不在图表上显示数据
【发布时间】:2016-06-01 15:58:05
【问题描述】:

我正在尝试使用 JBChartView 和 Objective C 在图表上显示数据。当我尝试将数据从我的 NSDictionary 加载到在我的图表上显示数据的数组上时,没有显示任何数据。但是,当我放置虚拟数据时,它会显示,所以这是我的 NSDictionary 之间的问题。我的字典里有信息,我可以确认一下。这是我的代码:

 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];

【问题讨论】:

  • 你有没有试过在赋值给 _chartData 之后在语句中放置断点?如果是,是否填充了 _chartData?
  • 您在获取数据之前很久就重新加载图表。数据获取是异步的。

标签: ios objective-c charts pfquery jbchartview


【解决方案1】:
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 循环之后和块内部

【讨论】:

  • 这个答案只是部分正确。您可能必须从主队列而不是后台队列调用图表上的reloadData
  • reloadData 自动在主队列上运行,即使从子后台线程调用它也是如此。
  • 好的,那么这种情况就没有问题了。
  • 但是,在这种情况下, this 在回调(一个块)中运行。结果之后块中的所有内容都在主队列中调用。
猜你喜欢
  • 2015-03-25
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-14
相关资源
最近更新 更多