***由于未捕获的异常'NSRangeException'而终止应用程序,原因:'*** - [__ NSArrayM objectAtIndex:]:索引5超出边界[0 .. 4]'

时间:2013-05-20 11:09:41

标签: ios arrays

由于未捕获的异常'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 个答案:

答案 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;

}

试试这段代码......

相关问题