UITableView
обновления между вызовами beginUpdates
и endUpdates
объединяются вместе и все выполняются одновременно. Документация Apple относится к порядку, в котором выполняются операции insert
и delete
:
Операции удаления и перезагрузки в блоке анимации определяют, какие строки и разделы в исходной таблице должны быть удалены или перезагружены; вставки указывают, какие строки и разделы должны быть добавлены в результирующую таблицу. Пути индекса, используемые для идентификации разделов и строк, следуют этой модели. С другой стороны, вставка или удаление элемента в изменяемом массиве может повлиять на индекс массива, используемый для последовательной операции вставки или удаления; например, если вы вставляете элемент по определенному индексу, индексы всех последующих элементов массива увеличиваются.
Также стоит отметить, что:
Звонки на beginUpdates и endUpdates могут быть вложенными; все индексы обрабатываются , как если бы был только внешний блок обновления.
[Акцент мой]
Итак: подумайте об удалении как происходящем в первом проходе, а затем о любых вставках, следующих за ним, используя новые пути указателей, которые появляются после удаления.
Это полезно. Однако, я не нашел никакой документации о том, где происходят перемещения строк (и секций), какую индексацию они должны использовать и влияет ли это на другие шаги. Кто-нибудь знает?