indexPath.row создает исключение

#iphone #uitableview #ios5 #custom-cell

#iPhone #uitableview #ios5 #пользовательская ячейка

Вопрос:

Я переключаю источник данных tableview, но indexPath.row выдает мне исключение [индекс x выходит за пределы]

 cell.customLabel.text = [[(_secondTab.selected) ? secondArray : firstArray objectAtIndex:indexPath.row]elementName];
 

Есть идеи, как это решить?

Комментарии:

1. Убедитесь, что в ваших двух массивах достаточно элементов?

Ответ №1:

Проблема в том, что индекс indexPath.row больше, чем тот, который существует в любом secondArray или firstArray . Чтобы устранить основную причину, вам нужно выяснить, почему элемент отсутствует в ваших массивах. Чтобы убедиться, что он не аварийно завершает работу и просто загружает пустую строку в свойство text метки, убедитесь, что наибольший индекс в массиве больше или равен indexPath.row :

 if (_secondTab.selected) { 
    cell.customLabel.text = (indexPath.row <= ([secondArray count]-1)) ? [[secondArray objectAtIndex:indexPath.row] elementName] : @"";
} else {
    cell.customLabel.text = (indexPath.row <= ([firstArray count]-1)) ? [[firstArray objectAtIndex:indexPath.row] elementName] : @"";
}
 

Комментарии:

1. Я не хочу отображать пустые элементы из моего второго массива. Как я это делаю?

2. Измените @""; в операторе if на строку, содержащую текст, который вы хотите отобразить вместо этого в случае, indexPath.row выходящем за рамки secondArray . Если вы вообще не хотите отображать строки TableView, вам нужно будет удалить объекты из secondArray источника данных перед -tableView:cellForRowAtIndexPath: вызовом. Где зависит от того, как структурировано приложение, хорошим местом будет место, которое вы заполняете secondArray

3. elementName является ли объект, который возвращает текст; Как это выглядело бы без @»» ?

Ответ №2:

Это может произойти, когда значение индекса выходит за пределы диапазона. Убедитесь, что secondArray и firstArray имеют одинаковое количество значений. Или же используйте свою логику, чтобы убедиться, что он находится вне диапазона или нет?

Например, если источником данных является secondArray, ваше indexPath.row значение равно 4

firstArray имеет 3 значения, secondArray имеет 6 значений. В этой ситуации [firstArray objectAtIndex:4] будет выдано исключение.