Estoy trabajando en una aplicación donde tengo una subclase personalizada de UITableViewCell. Quiero hacer que la altura de la celda sea dinámica en función del texto que contiene. Intento hacer eso en mi método heightForRowAtIndexPath. Pero tengo algunos problemas, el siguiente código provoca un error EXC_BAD_ACCESS (code = 2 address = 0xb7ffffcc).EXC_BAD_ACCESS en heightForRowAtIndexPath iOS
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
PostCell *cell = (PostCell *)[tableView cellForRowAtIndexPath:indexPath];
CGSize postTextSize;
if (![cell.postText.text isEqualToString:@""]) {
postTextSize = [cell.postText.text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(cell.postText.frame.size.width, 200)];
} else {
postTextSize = CGSizeMake(cell.postText.frame.size.width, 40);
}
return postTextSize.height + cell.userName.frame.size.height + 10;
}
Si en cambio tengo:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 100;
}
Funciona.
Parece que se está cayendo en esta línea: PostCell *cell = (PostCell *)[tableView cellForRowAtIndexPath:indexPath];
, y no sé por qué. Intenté construir limpio y reiniciar el simulador, pero ninguno funcionó. ¿Alguna idea de por qué está pasando esto?
¿Por qué mecanismo el método devuelve nil causa un EXC_BAD_ACCESS? – grahamparks
@grahamparks: ¡Buena pregunta! Intenté reproducir el problema y agregué la información a mi respuesta. –
Gracias, utilizando el origen de datos en su lugar trabajado. – Anders