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 に答える