tableview удалить последнюю строку в разделе - PullRequest
2 голосов
/ 05 мая 2011

Я много часов занимался исследованиями в 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];

1 Ответ

7 голосов
/ 05 мая 2011

Если вы хотите удалить словарь из вашего массива, который является его объектом в качестве индексной переменной, вам понадобится эта единственная строка.

[yourObject removeObjectAtIndex:indexPath.section];

и затем перезагрузите таблицу этой строкой

[yourTable reloadData];

Теперь, так как ваша таблица зависит от этого источника данных, она автоматически удаляется из таблицы.

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