Я показываю различные типы содержимого в tableview
и вычисляю высоту каждой ячейки с использованием разных пользовательских методов в heightForRowAtIndexPath
.
Один из этих пользовательских методов подразумевает преобразование некоторого html в NSMutableAttributedString
, а затем вычисление высоты этого NSMutableAttributedString
.
Для преобразования html я использую новый метод initWithData:
.
Все работает отлично, за исключением случаев, когда я поворачиваю экран = > У меня есть exc_bad_access каждый раз.
Используя инструменты/зомби, я смог найти ошибку, и на самом деле это initWithData:
.
(Когда я удаляю этот метод и создаю "простой" NSMutableAttributedString
с initWithString
, я могу изменить ориентацию столько раз, сколько захочу, а не crash
).
Любая идея, почему?
(Кстати, мой проект использует ARC)
Инструмент/Зомби скриншот:
Пользовательский метод, вызываемый в heightForRowAtIndexPath
:
< УтилитыForFrontEndUI 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);
}
Пользовательский метод, использующий преобразование initWithData для html to NSMutableAttributedString
:
< УтилитыForFrontEndUI 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;
}