NSMutableAttributedString initWithData: Verursacht EXC_BAD_ACCESS beim Drehen

Ich zeige verschiedene Arten von Inhalten in einemtableview und berechnen Sie die Höhe jeder Zelle mit verschiedenen benutzerdefinierten MethodenheightForRowAtIndexPath.

Eine dieser benutzerdefinierten Methoden impliziert die Konvertierung von HTML in einNSMutableAttributedStringund dann die Höhe davon berechnenNSMutableAttributedString.
Für die HTML-Konvertierung verwende ich die neueinitWithData: Methode.

Alles funktioniert einwandfrei, außer wenn ich den Bildschirm drehe => Ich habe jedes Mal einen exc_bad_access.

Mit Instruments / Zombies konnte ich den Fehler lokalisieren, und tatsächlich ist es dasinitWithData:.

(Wenn ich diese Methode entferne und ein "einfaches"NSMutableAttributedString mitinitWithStringIch kann die Ausrichtung so oft ändern, wie ich möchte, neincrash nicht mehr).

Irgendeine Idee warum?

(Übrigens, mein Projekt nutzt ARC)

Instrument / Zombie-Screenshot:

Benutzerdefinierte Methode aufgerufenheightForRowAtIndexPath :

<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);
}

Benutzerdefinierte Methode mit dem Befehl initWithData for html toNSMutableAttributedString Umwandlung:

<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;
}

Wenn ich initWithData durch ein einfaches initWithString ersetze, gibt es kein exc_bad_access mehr

+(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;
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage