Acabo de encontrar un comportamiento muy extraño e inesperado en la clase UITableView. Necesito la última celda de la tabla en mi sección de ser una altura diferente de las otras células, por lo que estoy haciendo básicamente esto:Llamando numberOfRowsInSection: from heightForRowAtIndexPath
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == [tableView numberOfRowsInSection:indexPath.section] - 1)
return 44;
else
return 88; //double size for all but the last row
}
parece bastante sencillo, pero cuando lo ejecuto, me sale un infinito bucle y se bloquea. Decidí que cuando llamo al numberOfRowsInSection:
, llama al método tableView: numberOfRowsInSection:
de mi fuente de datos. Esto tiene sentido ya que el método de tableView devuelve una versión almacenada en caché del valor de la fuente de datos, por lo que necesita obtener el valor de la fuente de datos la primera vez. Pero luego, llama a heightForRowAtIndexPath, pasando de nuevo indexPath [0, 0]! Y lo hace sin parar.
que era capaz de conseguir alrededor de él mediante el uso de
[self tableView:tableView numberOfRowsInSection:indexPath.section]
lugar (llamar a mi método de fuente de datos en lugar del método de la tableView). Alguien tiene alguna idea de por qué hace esto? ¿Es este comportamiento definido? ¿O un error en el marco TableView de Apple?
Parece que el manejo interno de Apple. Supongo que necesitaríamos un ingeniero de Apple para responder a este. – Altealice
¿No deberían ser flotadores 44.0 y 88.0? – railwayparade
Tal vez sea técnicamente más eficiente de esa manera, decirle al compilador por adelantado que es una carroza ... pero no me puedo imaginar que sea una gran diferencia en el rendimiento; cualquier flotador que tenga que tenga un punto 0 al final se escribe así, y no he encontrado ningún problema ... – GendoIkari