我在核心图中实现了一个散点图,其中一个数据源方法正在返回一个巨大的数字。这是方法:
- (NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot {
return [self.values count];
}
- (NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index
{
switch (fieldEnum) {
case CPTScatterPlotFieldX:
if (index < [self.practices count]) {
return [NSNumber numberWithUnsignedInteger:index];
}
break;
case CPTScatterPlotFieldY:
if ([plot.identifier isEqual:@"Practices"]) {
return self.values[index];
}
break;
}
return [NSDecimalNumber zero];
}
以下是自我价值的数量:
NSMutableArray *value = [[NSMutableArray alloc] initWithCapacity:200];
for (int i = 200; i > 0; i--) {
NSInteger randomNumber = arc4random() % 200;
[value addObject:[NSNumber numberWithInt:randomNumber]];
}
NSSortDescriptor *highestToLowest = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:NO];
[value sortUsingDescriptors:[NSArray arrayWithObject:highestToLowest]];
self.values = [value copy];
图表在调用时会崩溃:return self.values[index];
。当我尝试调试应用程序时,我发现传入的索引非常大。
这是该变量的图片。它是一个叫做索引的人:
我想弄清楚为什么这个数字太大了。一切似乎都与我实施的其他图表相似。然而,这似乎投入了大量资金。
答案 0 :(得分:0)
我已经设法找到了解决这个问题的方法。我的原始代码没有检查CPTScatterPlotFieldY以查看是否index < [self.values count]
。
switch (fieldEnum) {
case CPTScatterPlotFieldX:
if (index < [self.values count]) {
return [NSNumber numberWithUnsignedInteger:index];
}
break;
case CPTScatterPlotFieldY:
if ([plot.identifier isEqual:@"gpPractices"] && index < [self.values count]) {
return self.values[index];
}
break;
}
return [NSDecimalNumber zero];
通过添加此检查,如果索引小于数组中的对象数,它只会尝试访问self.values数组。