2013-07-12 1 views
1

У меня есть 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. Все номера в моем источнике данных верны. У кого-нибудь есть мысли о том, как я могу отладить это лучше? Или какие-либо идеи относительно того, что происходит? Любая помощь будет принята с благодарностью!

+0

Не могли бы вы предоставить начальный список указательных путей и значений 'indexPathsToRemove' и' sectionsToRemove'? И убедитесь, что вы не удаляете строки в удаленных разделах, так как это может привести к сбою таблицы. –

+0

Вы должны получить дополнительную информацию из этого отказа Assertion, если вы удалите контрольную точку исключения и дайте ей запустить. Не могли бы вы опубликовать это? – kball

+0

Будет делать тимофеевка. Я убеждаюсь, что никакие строки не удаляются из разделов. одна вещь, о которой мне интересно, если я удалю несколько разделов, измените ли пути указателя так, что теперь строки, которые я удаляю, больше недействительны? вернется к вам в списке. – SLEW

ответ

0

Я воспроизвел ваш сценарий, используя TLIndexPathTools и не получил сбой. Вот the source, если вы хотите взглянуть. Если вы пройдете через метод performBatchUpdatesOnTableView в TLIndexPathUpdates, вы можете точно увидеть, какие пакетные обновления выполняются. Когда я прошел через себя, единственное различие, которое я мог видеть из того, что вы описали, состоит в том, что разделы удаляются перед строками. Я попытался изменить порядок (удалив строки перед разделами), и он разбился. Тем не менее, я не видел секцию призраков.

Итак, я попытался бы удалить разделы перед строками. Если это не сработает, я думаю, что проблема лежит где-то за пределами предоставленной вами информации. Если вы можете опубликовать больше своего источника или пример проекта, я еще раз посмотрю.

+0

Большое вам спасибо за помощь. Тем не менее, сумасшедший сузился там, где эта проблема могла случиться. Его довольно сложная система, которую я пытаюсь вставить в это, поэтому я не удивлюсь, если что-то еще происходит. Если что-нибудь изменится, я обязательно сообщу вам. Я бы дал вам некоторую репутацию, но я новичок и не могу. Еще раз спасибо за время! – SLEW

Смежные вопросы