将 HTML 文本分配给 NSAttributedString 会在全局队列上抛出EXC_BAD_ACESS



我正在为NSAttributedString分配HTML文本。然后将此属性字符串分配给 UitableViewCell in cellForRowAtIndexPath Method 中的 UILabel 之一。
由于细胞重复使用initWithData: method is causing sluggishness at UI
因此,我制作了在全局队列上执行的代码。我正在做这样的事情:

-(void)assignAttrText:(NSDictionary *)dict{
NSDictionary *msgThreadDict = [dict objectForKey:@"messgDict"];
__block DRMessageThreadTableViewCell *cell = [dict objectForKey:@"cell"];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
    NSError *err = nil;
    NSAttributedString *attributedString =
    [[NSAttributedString alloc]
     initWithData: [[msgThreadDict objectForKey:@"text"] dataUsingEncoding:NSUTF8StringEncoding]
     options: @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType }
     documentAttributes: nil
     error: &err];
    if(err){
        NSLog(@"Unable to parse label text: %@", err);
    }
    else{
        cell.messageTextLabel.attributedText = attributedString;
    }
});

任何导致应用程序崩溃的线索,方法EXC_BAD_ACCESS

[[NSAttributedString alloc]
     initWithData: [[msgThreadDict objectForKey:@"text"] dataUsingEncoding:NSUTF8StringEncoding]
     options: @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType }
     documentAttributes: nil
     error: &err];

[msgThreadDict objectForKey:@"text"]创建一个NSData *mydata对象,然后使用[[NSAttributedString alloc] initWithData: mydata ...

我认为您的对象不是NSData类型,使用字符串然后转换为数据,因此EXC_BAD_ACCESS.

NSString *ceva = [NSString stringWithFormat:@"%@",[msgThreadDict objectForKey:@"text"]];  
NSData *mydata = [ceva dataUsingEncoding:NSUTF8StringEncoding];

最新更新