1
    NSLog(@"m_datasource %d and coord.color %d",[m_dataSource.colors count],[coord.colorIndexes count]);

            cell.spotColor  = [m_dataSource.colors objectAtIndex: [coord.colorIndexes lastObject] intValue];

ここで、m_datasource 60 と coord.color 2 の値を取得しています。

4

3 に答える 3

2

使用していると思われる NSArray がゼロから始まるという事実によるものですか? 60 番目のオブジェクトのインデックスは 59 ですか?

于 2013-05-20T17:57:33.960 に答える
0

あなたは間違ってやっています:

NSLog(@"m_datasource %d and coord.color %d",[m_dataSource.colors count],[coord.colorIndexes count]);
cell.spotColor  = [m_dataSource.colors objectAtIndex: [coord.colorIndexes lastObject] intValue];

上記の最後のオブジェクトcoord.colorIndexesが「100」の場合は、statemnt を確認してください。次のようになります。

cell.spotColor  = [m_dataSource.colors objectAtIndex: 100]; 

しかし、m_dataSource.colors配列には60個のオブジェクトしか含まれていないため、配列がインデックス例外からスローされます。

コードを以下のスニペットに置き換えます。

// get array count and substract with 1 - so it will retrun you last index of coord.colorIndexes array
cell.spotColor  = [m_dataSource.colors objectAtIndex: [coord.colorIndexes count]-1];

これが配列の概念について簡単に説明するのに役立つことを願っています。

于 2013-06-03T10:18:13.197 に答える
0

count メソッドを使用していて、返された値を使用してインデックスのオブジェクトを取得する場合、2 つのオブジェクトの配列のカウントは 2 ですが、オブジェクト 1 のインデックスは 0 で、オブジェクト 2 のインデックスは1 のインデックス。

int index = [someArraytoCount count] - 1;

someObj *myObj = [otherArray objectAtIndex:index];

さらに、ロジックを使用して安全にします。

if (index < [otherArray count] && index >= 0)

次に、そのインデックスが配列に存在し、アプリがクラッシュすることはありません

于 2013-05-20T18:33:04.533 に答える