Странный переход в cellForRowAtIndexPath к другому оператору возврата - PullRequest
0 голосов
/ 05 августа 2011

У меня есть это в моем tableView:cellForRowAtIndexPath:

if (condition) {
    // make a custom cell
    return cell;  // line number 240
}
else {
    // make another kind of cell
    return cell;  // line number 256
}

Я получил EXC_BAD_ACCESS, поэтому я запустил отладчик и установил точку останова, шаг за шагом пропуская код.

Когда я шагнул вперед «шаг за шагом» от строки 256 , она сразу перешла к строке 240 , то есть в другую ветвь оператора if. Как это возможно ???

Большое спасибо за вашу помощь,
Sascha

Ответы [ 4 ]

2 голосов
/ 05 августа 2011

Я думаю, что нашел решение.Контроллер представления с табличным представлением также является делегатом потока фоновой веб-загрузки.Очевидно, отладчик может проходить только один поток за раз.Процедура делегата действительно вызывала scrollToRowAtIndexPath: без проверки выше condition.

Тем не менее, поведение отладчика несколько озадачивает.

0 голосов
/ 05 августа 2011

Этот метод вызывает себя столько же раз, сколько и строк, возвращаемых в методе numberOfRowsInSection и каждый раз, когда ячейка равна nil .Скорее всего, элемент управления перешел к следующему ряду, чтобы выделить для него UITableViewCell, и в то время я предполагаю, что условие if выполнено.

0 голосов
/ 05 августа 2011

Step Over - то же самое, что Step Into, за исключением того, что когда он достигает вызова для другой процедуры, он не вступает в процедуру.Процедура запустится, и вы попадете к следующему оператору в текущей процедуре.

, поэтому перешагните через, чтобы получить следующий оператор и ваш вызов cellForRowAtIndexPath numberOfRow.поэтому в какой-то итерации ваше условие if становится истинным и переходит к вашей строке № 240

0 голосов
/ 05 августа 2011

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath будет вызван x раз, где x = количество строк.

Так что я думаю, что ваша проблема в том, что ваш (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section не возвращает правильное значение, и, скорее всего, это значение больше, чем то, откуда вы извлекаете данные.

т.е. Если у вас есть массив размером 3, но вы пытаетесь создать ячейку 4-й строки.

...