0

我收到* 由于未捕获的异常“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;
}
4

4 回答 4

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

注意:您正在访问具有相同索引的数组和内部数组。不能肯定地说,但这表明存在一些逻辑问题。所以检查一下。

于 2013-05-20T11:15:53.067 回答
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,如果是,为什么它目前没有。

于 2013-05-20T11:11:48.280 回答
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]];
        }

    }
于 2013-05-20T11:17:22.697 回答
-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;

}

试试这个代码...

于 2013-05-20T11:14:48.367 回答