Удаление всех строк таблицы в разделе - PullRequest
0 голосов
/ 23 февраля 2011

Для моего проекта iPad мне нужно иметь возможность перезагрузить строки таблицы. Вот как это должно работать, зависеть от некоторого «идентификатора», выбранного из всплывающего окна, мне нужно иметь возможность перезагрузить строки таблицы, строки таблицы являются динамическими и имеют UITextField в нем. Я попытался использовать [self.tableView reload], но по какой-то причине он не обновляет строки правильно. Что-то вроде заполнителя UITextField, принадлежащего предыдущему «id», не меняется. Я имею в виду, чтобы удалить все ячейки в этом конкретном разделе и перезагрузить таблицу с новым «id». Когда я делаю это, я получаю это исключение:

* Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Неверное обновление: недопустимое количество строк в разделе 0. Число строк, содержащихся в существующем разделе после обновления (3), должно быть равным количеству строк, содержащихся в этом разделе до обновления (3), плюс или минус количество строк, вставленных или удаленных из этого раздела (0 вставлено, 3 удалено). '

Код проекта:

- (void)selectedArchiefID:(NSString *) value {
   [self.popOverController dismissPopoverAnimated:YES];

   // collects all available document indexfields
   int rowCount = [indexDefinities count];
   NSMutableArray *indexPaths = [[NSMutableArray alloc] init];

   for (int curIndex=0; curIndex < rowCount; curIndex++) {
       [indexPaths addObject:[NSIndexPath indexPathForRow:curIndex inSection:0]];
   }

   // deletes rows
   if ([indexPaths count] > 0) {
      [self.tableView beginUpdates];
      [self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
      //[self.tableView deleteSections:0 withRowAnimation:UITableViewRowAnimationNone];
        [self.tableView endUpdates]; //crashes here
   }

   [self.tableView reloadData];
}

Есть идеи, что я сделал не так?

1 Ответ

0 голосов
/ 23 февраля 2011

Похоже, вы забыли изменить данные источника данных таблицы.

Вы не можете просто изменить макет таблицы.

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

Или вы могли бы написать большого, если не иначе, монстра, который вычисляет, сколько разделов (и строк) вернуть в numberOfSectionsInTableView: и tableView:numberOfRowsInSection:.

Неважно, как вы это делаете, но вы должны удалить данные, прежде чем обновлять представление таблицы.


Еще одна вещь, поскольку в обоих методах [self.tableView beginUpdates]; /*...*/ [self.tableView endUpdates]; и [self.tableView reloadData]; обычно бесполезны. Последний убил бы эффект анимации, который вы получаете от первого.

...