でさまざまな種類のコンテンツを表示し、tableviewさまざまなカスタム メソッドを使用して各セルの高さを計算しheightForRowAtIndexPathます。
これらのカスタム メソッドの 1 つは、一部の html を に変換してNSMutableAttributedStringから、この の高さを計算することを意味しNSMutableAttributedStringます。
HTML 変換には、新しいinitWithData:メソッドを使用します。
画面を回転する場合を除いて、すべてが完全に機能します => 毎回 exc_bad_access が発生します。
Instruments / Zombies を使用して、エラーを見つけることができました。実際、それは thisinitWithData:です。
(このメソッドを削除して で「シンプル」NSMutableAttributedStringを作成するとinitWithString、向きを何度でも変更できcrashます)。
理由はありますか?
(ちなみに、私のプロジェクトはARCを使用しています)
楽器/ゾンビのスクリーンショット:

で呼び出されるカスタム メソッドheightForRowAtIndexPath:
< UtilitiesForFrontEndUI heightForFacebookAttributedText: >
+(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);
}
html から conversion に initWithData を使用するカスタム メソッドNSMutableAttributedString:
<FrontEndUI のユーティリティformatRawFacebookContentForFrontEndRichTextContents:>
+(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;
}
initWithData を単純な initWithString に置き換えると、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;
}