断言失败:(forceBreakIndex > NSMaxRange(lastResortNode->lineBreak.range)),函数 -[_NSOptimalLineBreaker _calculateOptimalWrapping]

问题描述 投票:0回答:1

我发现了一个错误,即使用

NSAttributedString
解析 HTML 字符串并使用
UITextView
AttributedText
中使用它。错误是这样的:

断言失败: (forceBreakIndex > NSMaxRange(lastResortNode->lineBreak.range)),函数 -[_NSOptimalLineBreaker _calculateOptimalWrapping],文件 NSOptimalLineBreaker.m,第 1706 行。

解析在 iOS 15 或更低版本上似乎运行良好。但在 iOS 16 或更高版本中,它会因上述错误而崩溃。

有什么解决方法吗,或者这只是 iOS 版本的问题?

我尝试过用最简单的

NSAttributedString
来解析HTML内容,但是在iOS 16以上还是会崩溃。

所以对于我的 HTML 内容的解析代码,我使用这个:

func setHTMLContent(_ htmlContent: String, font: UIFont, textColor: UIColor) {
    guard let attributedString = try? NSMutableAttributedString(data: htmlContent.data(using: .utf8)!, options: [.documentType: NSAttributedString.DocumentType.html], documentAttributes: nil) else { return }
        
    attributedString.addAttributes([.font: font, .foregroundColor: textColor], range: NSRange(location: 0, length: attributedString.length))
        self.attributedText = attributedString
}

并将其用于某些文本视图,只需简单地调用:

SomeTextView.setHTMLContent("Some HTML content", font: UIFont.systemFont(ofSize: 14), textColor: .white)

对于某些 HTML,它在 iOS 16 以上版本上完美运行。但对于另一个 HTML,它会在 iOS 16 以上版本上崩溃。但在下面的 iOS 16 上运行得很好。我无法提供导致崩溃的 HTML 内容,因为它是机密的。为什么我认为问题不在 HTML 内容中,因为例如在 iOS 15 上它工作得很好,所以我认为这可能是在 iOS 16 上使用

NSAttributedString
解析导致崩溃的原因。

ios swift uikit nsattributedstring
1个回答
0
投票

如果 html 字符串在句子中间包含 ,则会发生此问题。 在将 html 转换为属性字符串之前,只需将  替换为空格,然后进行转换。 希望这个回答对你有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.