2013-05-20 4 views
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 Как подбивать это ?Uncaught исключение: *** - [__ NSArrayM objectAtIndex]: индекс 60 за пределами [0 .. 59]

+2

Используйте большой массив или меньший индекс. (Обратите внимание, что общая ошибка заключается в том, чтобы забыть, что индексы массива работают 0..N-1, а не 1..N.) –

+4

У вас была * такая же проблема * здесь сегодня: http://stackoverflow.com/questions/16648195/ прекращение-приложение-из-за-на-неперехваченного-исключения-nsrangeexception-причины. Я не хочу звучать недружелюбно, но вы поняли проблему и решение? –

ответ

2

Это связано с тем, что ваш NSArray, который, как я полагаю, вы используете, начинается с нуля? и что 60-й объект находится в индексе 59?

+0

Итак, какое решение для этого ... – Nishi

+0

NSLog (@ "m_datasource% d и coord.color% d", [m_dataSource.colors count], [coord.colorIndexes count]); cell.spotColor = [m_dataSource.colors objectAtIndex :([coord.Interfs lastObject] intValue] -1); – Rambatino

+0

Попробуй, у него есть «-1» в конце. если это не работает, отправьте мне весь код, который у вас есть, и я его сортирую – Rambatino

0

Если вы используете метод count и используете возвращаемое значение для получения объекта по индексу, то вам нужно минус 1, поскольку массив из 2 объектов имеет счет 2, но объект 1 имеет индекс 0 и объект 2 имеет индекс 1.

int index = [someArraytoCount count] - 1;

someObj *myObj = [otherArray objectAtIndex:index];

Дополнительно быть безопасным с помощью логики.

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

Тогда этот показатель будет существовать в массиве, и вы не будете иметь приложение аварии

0

Ты doint него неправильно:

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

Надеется, что это поможет вам вкратце о концепциях массива.