由于未捕获的异常'NSRangeException',我正在 *终止应用,原因:'*
我没有得到确切的问题,请帮助我
- (NSMutableArray*) arrayAtPointIndex:(NSInteger) index {
NSMutableArray * array = [[NSMutableArray alloc] init];
if ( series )
{
for (int plotIndex = 0; plotIndex <= [_points count]; plotIndex++) {
SALChartCoordinate * coord1 = [_points objectAtIndex:plotIndex];
CGFloat differ = abs( [[coord1.series objectAtIndex:index] floatValue] );
[array addObject:[NSNumber numberWithFloat:differ]];
}
}
if ( [array count] > 0 )
return [array autorelease];
[array release];
return nil;
}
答案 0 :(得分:2)
最可能的地方是:[coord1.series objectAtIndex:index]
因为您没有检查NSArray系列大小和plotIndex。
提出这样的条件
if(coord1.series.count-1 <= index)
{
CGFloat differ = abs( [[coord1.series objectAtIndex:plotIndex] floatValue] );
[array addObject:[NSNumber numberWithFloat:differ]];
}
注意:您正在访问具有相同索引的数组和内部数组。不能肯定地说,但这表明存在一些逻辑问题。所以检查一下。
答案 1 :(得分:0)
Objective-C(和大多数编程语言)中的数组索引从0开始。因此,5项列表中的第一项是索引0,最后一项是索引4。
因此,你的for循环不应该从1开始,而是:
for (int plotIndex = 0; plotIndex < [_points count]; plotIndex++) {
...
但是,正如trojanfoe
正确提到的那样,这不是异常的原因。您还可以打印或检查以下值:
coord1.series
正如我想象的那样,系列中的项目数量与点数不同,但您似乎依赖于以下事实:
CGFloat differ = abs( [[coord1.series objectAtIndex:plotIndex] floatValue] );
^ coord1.series does not have an item at this index
因此,我认为您的第一个行动是确定coord1.series
是否具有与_points
相同(或更多)的元素数量是否安全? ,如果是这样,为什么它目前没有。
答案 2 :(得分:0)
仔细检查..
if ( series )
{
for (int plotIndex = 1; plotIndex < [_points count]; plotIndex++) {
SALChartCoordinate * coord1 = [_points objectAtIndex:plotIndex];//problem not here
CGFloat differ = abs( [[coord1.series objectAtIndex:plotIndex] floatValue] );//problem is here check your array which contains only five objects but you are trying to get 6th object that is the reason.
[array addObject:[NSNumber numberWithFloat:differ]];
}
}
答案 3 :(得分:-3)
- (NSMutableArray*) arrayAtPointIndex:(NSInteger) index {
NSMutableArray * array = [[NSMutableArray alloc] init];
if ( series )
{
for (int plotIndex = 0; plotIndex < [_points count]; plotIndex++) {
SALChartCoordinate * coord1 = [_points objectAtIndex:plotIndex];
CGFloat differ = abs( [[coord1.series objectAtIndex:plotIndex] floatValue] );
[array addObject:[NSNumber numberWithFloat:differ]];
}
}
if ( [array count] > 0 )
return [array autorelease];
[array release];
return nil;
}
试试这段代码......