/ / La celda cellForRowAtIndexPath de UITableView no es nula cuando se espera - iphone, uitableview

UITableView cellForRowAtIndexPath cell no es nula cuando se espera - iphone, uitableview

Tengo un UITableView agrupado en mi clase UIViewController y estoy encontrando que a veces, la celda en cola de espera no es nula como se esperaba.

La tabla tiene 3 secciones para comenzar y y comotan pronto como se invoca el "viewDidLoad", se inicia una llamada del servidor para averiguar si hay más secciones. Antes de que la vista sea representada, la respuesta del servidor llega y se nos dice que tenemos 4 secciones. Para lidiar con este cambio, yo hago:

[self.tableview beginUpdates]

// Do the updating of the array that holds table data

[self.tableview endUpdates]
[self.tableview reloadData];

A continuación recibo la llamada a"numberOfSectionsInTableView", para el que devuelvo 4, seguido de "numberOfRowsInSection" y estoy "devolviendo el recuento de filas correcto esperado. Tenga en cuenta que esta es la primera vez que recibo una de estas llamadas ya que la recarga de la tabla ocurrió tan rápido y antes de la vista incluso se prestó.

En este punto, solo los datos del 1er.Las secciones son visibles y desplácese para ver la última sección. Cuando se desplaza para ver la última sección, una de las celdas que espero estar en la llamada a "tableView: cellForRowAtIndexPath" no es nula como se esperaba. El tipo de celda es en realidad lo que se usó para otra sección (tengo un tipo de UITableViewCell para las dos primeras secciones y otra para las dos últimas secciones que estoy creando y devolviendo en cellForRowAtIndexPath cuando la celda es nula).

Entonces, ¿cómo resuelve UITableView qué celda se debe sacar de la cola y cómo entiendo por qué esta celda para esta sección / fila en particular no es nula cuando realmente debería serlo?

Respuestas

2 para la respuesta № 1

¿Qué estás usando para tu identificador celular? Eso es lo que UITableView Se utilizará al determinar qué sacar de la cola. Si tiene diferentes tipos de celdas, necesitará diferentes identificadores de reutilización.


2 para la respuesta № 2

La idea de la reutilización celular se reduce a minimizar.Ver las asignaciones y la configuración interna de UITableViewCell para mejorar el rendimiento de desplazamiento. En términos generales, cada vez que una celda se apaga, una vista de tabla la elimina de sí misma como una subvista y la agrega a un grupo. La próxima vez que necesite mostrar una celda, puede retirar de la agrupación una cola no utilizada, configurarla y devolverla a la vista de tabla. Esa es una implementación inteligente, pero una vista de tabla no puede reutilizar las celdas de manera eficiente sin sus sugerencias, denominadas identificadores de reutilización.

El enfoque más común es atar la reutilización.Identificadores para las clases celulares. Si, por ejemplo, utiliza celdas de clase A para mostrar personas de una libreta de direcciones y celdas de clase B para mostrar organizaciones, obviamente no puede reutilizar celdas B para personas, y viceversa. En tal caso, designará a estos dos tipos de identificadores de reutilización diferentes, lo que garantiza que cuando necesite proporcionar la celda A, la tabla eliminará la cola de una celda A o devolverá el valor nulo si su conjunto de celdas A no utilizadas está vacío.

Una extensión natural a eso es nula reutilización.identificadores Le dicen a una vista de tabla que no debe reutilizarlos, liberándolos cuando ya no están en la pantalla. ¿Por qué puede necesitarlo? Para celdas únicas o para las celdas que usted administra, o para las celdas que tienen un ciclo de vida atípico, o que son extremadamente caras de dibujar. Sin embargo, cuantas menos celdas no se puedan reutilizar, menor será la huella de memoria.