我是CorePlot的新手并且在理解“数据源”方面遇到了一些麻烦。我确信我很可能误解了一些功能。现在,我正在尝试显示我已经获得并保存到_soldarray
和_datearray
的2个json数据。
收到的数据示例(因为它在nsLog上):
_soldarray : {0, 0, 0, "62.69", "48.3", 81,}
_datearray : {("02/07/12", "02/10/12", "02/14/12", "02/11/12", "02/10/12", "02/12/12"}
我有
CPTPlotDataSource methods
-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot {
return [_soldarray count];
}
-(NSArray *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndexRange:(NSUInteger)index {
switch (fieldEnum) {
case CPTScatterPlotFieldX:
for (int i =0 ; 50;i++){
return [_datearray objectAtIndex:i];
}
break;
case CPTScatterPlotFieldY:
for (int j =0 ; 50;j++){
return [_soldarray objectAtIndex:j];
}
break;
}
return 0;
}
和配置:
CPTGraph *graph = self.hostView.hostedGraph;
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace;
// 2 - Create the three plots
CPTScatterPlot *aaplPlot = [[CPTScatterPlot alloc] init];
aaplPlot.dataSource = self;
aaplPlot.identifier = _soldarray;
CPTColor *aaplColor = [CPTColor redColor];
[graph addPlot:aaplPlot toPlotSpace:plotSpace];
我尝试将数据源更改为数组,但这不起作用。有人能指出我正确的方向。我无法理解plot.datasource和-(NSArray *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndexRange:(NSUInteger)
索引的工作原理。提前谢谢!
答案 0 :(得分:0)
-numbersForPlot:field:recordIndexRange:
期望数据源返回给定字段的值数组,而-numberForPlot:field:recordIndex:
一次为给定索引返回一个值。
假设数组中的值是NSNumber
个对象(或其他响应-decimalValue
或-doubleValue
的其他内容,如NSString
),您可以采用这种方式实现。
-(NSNumber *)numberForPlot:(CPTPlot *)plot
field:(NSUInteger)fieldEnum
recordIndex:(NSUInteger)idx
{
switch (fieldEnum) {
case CPTScatterPlotFieldX:
return [_datearray objectAtIndex:idx];
break;
case CPTScatterPlotFieldY:
return [_soldarray objectAtIndex:idx];
break;
}
return nil;
}
或
-(NSArray *)numbersForPlot:(CPTPlot *)plot
field:(NSUInteger)fieldEnum
recordIndexRange:(NSUInteger)indexRange
{
switch (fieldEnum) {
case CPTScatterPlotFieldX:
return [_datearray subarrayWithRange:indexRange];
break;
case CPTScatterPlotFieldY:
return [_soldarray subarrayWithRange:indexRange];
break;
}
return nil;
}