NSMutableAttributedString initWithData: causando EXC_BAD_ACCESS en la rotación
Muestro diferentes tipos de contenidos en untableview
y calcule la altura de cada celda usando diferentes métodos personalizados, enheightForRowAtIndexPath
.
Uno de estos métodos personalizados implica convertir algunos html en unNSMutableAttributedString
, y luego calculando la altura de esteNSMutableAttributedString
.
Para la conversión html utilizo el nuevoinitWithData:
método.
Todo funciona perfectamente, excepto cuando giro la pantalla => Tengo un exc_bad_access cada vez.
Usando instrumentos / zombies, he podido localizar el error, y de hecho es estoinitWithData:
.
(Cuando elimino este método y creo un "simple"NSMutableAttributedString
coninitWithString
, Puedo cambiar la orientación tantas veces como quiera, nocrash
nunca más).
¿Alguna idea de por qué?
(Por cierto, mi proyecto usa ARC)
Captura de pantalla del instrumento / zombi:
Método personalizado llamado enheightForRowAtIndexPath
:
<UtilitiesForFrontEndUIheightForFacebookAttributedText
:>
+(CGFloat)heightForFacebookAttributedText:(NSString *)attributedText withWidth:(CGFloat)width
{
NSAttributedString *formatedText = [self formatRawFacebookContentForFrontEndRichTextContents:attributedText];
CGRect rect= [formatedText boundingRectWithSize:CGSizeMake(width, 1000) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];
return ceilf(rect.size.height);
}
Método personalizado utilizando initWithData para html paraNSMutableAttributedString
conversión:
<UtilitiesForFrontEndUIformatRawFacebookContentForFrontEndRichTextContents:
>
+(NSAttributedString *)formatRawFacebookContentForFrontEndRichTextContents:(NSString *)stringToFormat
{
// THIS GENERATE EXC_BAD_ACCESS ON DEVICE ROTATION (WORKS IF NO ROTATION)
NSData *dataContent = [stringToFormat dataUsingEncoding:NSUTF8StringEncoding];
NSMutableAttributedString *richTxtContent = [[NSMutableAttributedString alloc] initWithData:dataContent options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]} documentAttributes:nil error:nil];
NSRange myRange;
myRange.location = 0;
myRange.length = richTxtContent.length;
[richTxtContent addAttributes:[self commonAttributesForFrontEndRichText] range:myRange];
return richTxtContent;
}
Si sustituyo initWithData por un simple initWithString no más exc_bad_access
+(NSAttributedString *)formatRawFacebookContentForFrontEndRichTextContents:(NSString *)stringToFormat
{
// THIS WORKS (NO MORE ROTATION CRASH)
NSMutableAttributedString *richTxtContent = [[NSMutableAttributedString alloc]initWithString:stringToFormat];
NSRange myRange;
myRange.location = 0;
myRange.length = richTxtContent.length;
[richTxtContent addAttributes:[self commonAttributesForFrontEndRichText] range:myRange];
return richTxtContent;
}