0

Image Description

荆文征

Zhidu Inc.


你好,再见

Html 字符串转换成 AttributedString ios版本下的错误

  • 小酒馆老板
  • /
  • 2017/5/17 14:31:0

在ios中想要把html字符串转换成 AttributedString ,需要使用以下方法


Image Description
请勇敢地向黑夜里走去<br/><br/>虽然你没有什么成功的机会,虽然你刚上路便可能横死<br/><br/>但我依然祝福你,并诅咒你。——猫腻

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithData:[title dataUsingEncoding:NSUnicodeStringEncoding]  options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];

这样子的话,html字符串就可以转换为 NSMutableAttributedString 对象,可以展示在可以展示 AttributedString的空间上,但是这个东西是有一定时间的耗时的。
尤其是在 tableview上会消耗很大的计算时间,使滑动出现问题。那么我们就需要进行一个一步计算,并且为了更好的节省性能,我们最好做一个缓存。接下来就是我的制作方式

@interface OddityHtmlTitleCache()
@property(nonatomic,strong)  NSCache *sharedCache;

@end

@implementation OddityHtmlTitleCache

// 创建一个 单利的 管理器
+(OddityHtmlTitleCache *)sharedCache{

    static OddityHtmlTitleCache *sharedManager;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedManager = [[OddityHtmlTitleCache alloc]init];

        sharedManager.sharedCache = [[NSCache alloc] init];;
    });
    return sharedManager;
}

 // 根据 html字符串获取  NSAttributedString
-(NSAttributedString *)htmlTitleByString:(NSString *)title{

    // 在cache 提取
    id viewController = [self.sharedCache objectForKey:title];
    if ( viewController) {
        return viewController;
    }

    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithData:[title dataUsingEncoding:NSUnicodeStringEncoding]  options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];

    [attributedString addAttributes:@{
                                      NSFontAttributeName:[UIFont oddity_font3],
                                      } range:[attributedString.string fullRange]];

    if (attributedString) {

        [self.sharedCache setObject:attributedString forKey:title];
    }
    return attributedString;
}

@end

最开始,我是在ios10,测试的,没有问题,但是我的同时反馈给我。他有崩溃。
最终我查到了,在stackoverflow,这个转的方法,在ios9.2之前,异步执行该方法都会错误的。
且行且珍惜把……

专栏: IOS
标签: AttributedString iOS8 html2AttributedString error