Я много часов занимался исследованиями в stackoverflow / google и изучил несколько сообщений на предмет похожих проблем.Тем не менее, ни один из них не решал конкретную проблему, с которой я столкнулся.
В двух словах, у меня есть NSMutableArray из NSMutableDictionay (-ies).Каждый словарь содержит NSMutableArray.Когда я удаляю последний элемент в массиве, я также хотел бы удалить словарь.В словах таблицы, я хотел бы удалить раздел при удалении последней строки в этом разделе.
Я уверен, что источник данных соответствует.
этот пост здесь: UITableView:удаление разделов с анимацией предлагает удалить раздел напрямую, если удаляемая строка является последней строкой.
Это прекрасно работает, если раздел является последним разделом в моем корневом массиве.
Я обнаружил ошибку, если раздел не последнийsection , раздел после него займет свое место.Когда система рисует анимацию удаления, она выдаст NSInternalInconsistencyException
.
Скажем, у меня есть раздел 0 и раздел 1, оба с одной строкой.Когда я удаляю indexPath (0,0), я обнаруживаю, что раздел 0 должен идти вместо этого, потому что он имеет только одну строку, затем я удаляю раздел 0 в commitEditingStyle
Исключение выдается, потому что пользователь удалил строку0 в Разделе 0, поэтому итоговое число строк в Разделе 0 должно измениться с 1 на 0. Однако после удаления старый Раздел 1 теперь становится Разделом 0, и он вернет число строк в Разделе 0: 1.
Есть какие-нибудь предложения здесь?Или я упускаю что-то очень простое?
Мой код в commitEditingSytle:
[tableView beginUpdates];
[... remove the item from array of this dictionary...]
// if last row in section, remove the section
NSNumber *section = [NSNumber numberWithUnsignedInteger: indexPath.section];
if ([[FoodTypes subtypes:section] count] == 0)
{
[...remove the dictionary from root array...]
[tableView deleteSections: [NSIndexSet indexSetWithIndex: indexPath.section] withRowAnimation:YES];
}
else
{
// otherwise, remove the row only
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
[tableView endUpdates];