Ошибка подтверждения для UITableView selectRowAtIndexPath - PullRequest
6 голосов
/ 10 марта 2012

Мне кажется, что это проблема, которая требует особого внимания ... мой Google-фу довольно хорош, но я не смог получить ничего полезного.

Это самая простая вещь, и все жеЯ не могу понять, в чем проблема с ним.

У меня есть UITableView.Это подпредставление, которое мой VC называет _form.Я использую его для стилизации, а не для отображения данных.Он имеет 2 ячейки.

В определенном событии я пытаюсь выбрать другую ячейку, используя selectRowAtIndexPath: animated: scrollPosition.

Когда я это делаю, это SIGABRTS.

Простой пример:

- (IBAction)submitClicked:(id)sender
{
    [_submit setTitle:@"Wha!?" forState:UIControlStateNormal];
    NSIndexPath *row = [NSIndexPath indexPathWithIndex:0];
    NSLog(@"%d", [[_form indexPathForSelectedRow] row]);
    [_form selectRowAtIndexPath:row animated:YES scrollPosition:YES];
}

Название кнопки изменено, И в таблице выводится, что выбранная строка равна 0 или 1, но при попытке выбрать нужную ячейку она ломается:

2012-03-09 21:57:39.905 <omitted>[16329:207] 0
2012-03-09 21:57:39.908 <omitted>[16329:207] *** Assertion failure in -[NSIndexPath row], /SourceCache/UIKit_Sim/UIKit-1912.3/UITableViewSupport.m:2598
(gdb)

Я предполагаю, что это означает, что что-то не так с тем, как настроена моя таблица, но я не уверен, что именно.Обычный выбор ячеек в таблице (щелчок по ней) работает, как указано ожидаемым ответом в моем tableView: didSelectRowAtIndexPath.Все остальное прекрасно работает с тем, как я это настроил, кроме этого.

(Кроме того, я отвечаю другим людям с дополнительной отладочной информацией, а не просто "(gdb)". Как я могу получить это?)

Спасибо!

1 Ответ

18 голосов
/ 10 марта 2012

Индексный путь для ячейки табличного представления должен иметь как строку, так и раздел. Попробуйте создать индексный путь, используя фабричный метод (определенный в NSIndexPath UIKit Additions ), например:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[_form selectRowAtIndexPath:indexPath animated:YES scrollPosition:YES];
...