У меня есть UITableView, который инициализирован в общей сложности 8 разделами, большинство разделов имеют только одну строку, но некоторые из них имеют 2. Я делая пакетное удаление строк в таблице. Я понимаю, что некоторые из этих строк являются единственными строками в их разделе, поэтому вместо того, чтобы удалять эти строки, я пытаюсь удалить их разделы. Я пытаюсь перейти от 8 разделов (всего 12 строк) до остальных 2 разделов (по 1 строке в каждом).UITableView запрашивает секцию призраков после удаления строки и секции партии, вызывая сбои
Прежде чем я позвоню в таблицу, чтобы удалить строки и разделы, я убеждаюсь, что все строки и разделы находятся вне моего источника данных. Мой 2d-массив обновляется должным образом, так что новый размер массива равен 2, при этом каждый подмассиводержатель имеет только 1. Учитывая это, все в источнике данных правильно обновляется перед выполнением фактического удаления.
довольно простой код, чтобы сделать удаление
[self.tableView beginUpdates];
[self.tableView deleteRowsAtIndexPaths:indexPathsToRemove withRowAnimation:UITableViewRowAnimationFade];
[self.tableView deleteSections:sectionsToRemove withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
Однако я получаю аварии на
[self.tableView endUpdates]
вызова. В частности, крах
*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit-2380.17/UITableView.m:1070
Edit: Это крушение было неправильно, я сбой из-за индекса из ошибки границ, которая будет описана ниже
Использование отладчика пошагово - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
а - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
заверяйте меня, что мой источник данных верен, возвращая 2 раздела и каждый раздел с 1 строкой. ОДНАКО, это странная часть.
В реализации делегата - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
представление таблицы передает мне раздел = 0, затем раздел = 1 (который ожидается), и он должен заканчиваться там. но это не делает, тогда он передает мне раздел = 6.
Я понятия не имею, откуда взялось 6. Все номера в моем источнике данных верны. У кого-нибудь есть мысли о том, как я могу отладить это лучше? Или какие-либо идеи относительно того, что происходит? Любая помощь будет принята с благодарностью!
Не могли бы вы предоставить начальный список указательных путей и значений 'indexPathsToRemove' и' sectionsToRemove'? И убедитесь, что вы не удаляете строки в удаленных разделах, так как это может привести к сбою таблицы. –
Вы должны получить дополнительную информацию из этого отказа Assertion, если вы удалите контрольную точку исключения и дайте ей запустить. Не могли бы вы опубликовать это? – kball
Будет делать тимофеевка. Я убеждаюсь, что никакие строки не удаляются из разделов. одна вещь, о которой мне интересно, если я удалю несколько разделов, измените ли пути указателя так, что теперь строки, которые я удаляю, больше недействительны? вернется к вам в списке. – SLEW