我正在为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];