UITableView с несколькими разделами: раздел с 1 строкой, удаление строки приводит к сбою приложения - PullRequest
1 голос
/ 14 июня 2010

У меня есть tableView с несколькими разделами. Когда раздел содержит только одну строку, и если я пытаюсь удалить эту строку, мое приложение аварийно завершает работу при выполнении этого кода:

[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];

Я получаю это исключение:

*** Terminating app due to uncaught exception 'NSRangeException', 
reason: '*** -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0)'

Для каждого раздела есть массив. Каждый из этих массивов содержит объекты для отображения в строках. Тогда есть другой массив, который содержит эти массивы.

Есть идеи, что я делаю не так? Спасибо.

редактировать:

ОК, я только что увидел в отладчике, что это метод tableView: titleForHeaderInSection, который сбой, потому что я получал заголовок раздела в массиве, который я только что удалил .. Поэтому я пытался получить доступ к массиву с 0 объектом в нем ...

Ответы [ 3 ]

0 голосов
/ 29 июня 2010

В табличном представлении есть источник, а источник содержит список отображаемых разделов и строк.Когда вы делаете вызов [tableView deleteRowsAtIndexPaths:withRowAnimation:], табличное представление переходит к обновлению таблицы, но источник теперь не синхронизирован (в нем есть строка, которую вы только что удалили).Решение состоит в том, чтобы обновить источник (будь то массив, данные ядра или что-то еще) прямо перед обновлением самого табличного представления.

0 голосов
/ 07 октября 2010

Если у вас есть только одна строка в разделе, вы должны удалить этот раздел. Ниже приведен код для удаления раздела. [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationTop];

0 голосов
/ 14 июня 2010

Самое простое объяснение состоит в том, что indexPath равен nil, что приводит к передаче пустого массива в метод удаления.

Записать значение indexPath для подтверждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...