#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]
будет выдано исключение.