¿Qué order realizan las inserciones / eliminaciones de fila combinadas en UITableView?

UITableView le permite realizar operaciones de edición por lotes usando beginUpdates y endUpdates .

Mi pregunta es: ¿tengo que saber si hace eliminaciones o inserciones primero? ¿O puedo referirme a todo por la ruta del índice antes de beginUpdates y funcionará mágicamente?

Supongamos que tengo una tabla:

 A (currently index path 0,0) B (0,1) C (0,2) D (0,3) E (0,4) F (0,5) 

Quiero convertirlo en:

 A (0,0) C (0,1) D (0,2) H (0,3) E (0,4) F (0,5) 

Por lo tanto, he eliminado B (que estaba en 0,1) e insertado H (que se insertó después de D – en 0,4 antes de las eliminaciones, o 0,3 después).

Entonces, entre mis llamadas de actualizaciones de inicio / final, ¿cuál de estas funcionará?

  1. deleteRowsAtIndexPaths: 0,1, seguido de insertRowsAtIndexPaths: 0,4
  2. deleteRowsAtIndexPaths: 0,1, seguido de insertRowsAtIndexPaths: 0,3
  3. insertRowsAtIndexPaths: 0,4, seguido de deleteRowsAtIndexPaths: 0,1
  4. insertRowsAtIndexPaths: 0,3, seguido de deleteRowsAtIndexPaths: 0,1

La documentation relevante de Apple para esto se encuentra en Ordenación de operaciones y routes de índice .

Las operaciones de eliminación y recarga dentro de un bloque de animation especifican qué filas y secciones en la tabla original se deben eliminar o volver a cargar; Las inserciones especifican qué filas y secciones deben agregarse a la tabla resultante . Las routes de índice utilizadas para identificar secciones y filas siguen este model.

Por lo tanto, la vista de la tabla primero realizará las operaciones de eliminación o actualización, cuyas routes de índice se refieren a routes de índice en los contenidos de la tabla original. Luego se realizan las inserciones, y esas routes de índice se refieren a routes de índice después de que se hayan eliminado.

Entonces, en teoría, su opción número '2' debería ser la que desea.