ios - NSAttributedString 的初始化使应用程序崩溃
问题描述
尽管它在do-catch
块内,但下面的代码会崩溃(并非总是但很少)。
Fabric crashlytics
声明例外是Fatal Exception: NSInternalInconsistencyException
,有时这EXC_BAD_ACCESS KERN_PROTECTION_FAILURE 0x000000016fccb1f8
do {
return try NSAttributedString(
data: data,
options: [
.documentType: NSAttributedString.DocumentType.html,
.characterEncoding: String.Encoding.utf8.rawValue
],
documentAttributes: nil
)
} catch {
return NSAttributedString()
}
虽然我阅读了它的苹果文档,NSAttributedString
但它声明它应该在主线程上,所以我用Dispatch.main.async
块包围它,但这样做并没有设置设置的样式NSAttributedString
解决方案
根据此处苹果开发者论坛提供的解决方案:https ://forums.developer.apple.com/thread/115405
遗憾的是,这是 iOS (r. 23592459) 中的一个已知错误,它可能会影响从 HTML 构造 NSAttributedString 的任何人。
除了完全避免使用此 API 之外,没有好的解决方法。我的建议:
如果要显示大块复杂的 HTML,请使用 WKWebView。
如果这个 HTML 受到高度约束——也许你只是使用 HTML 作为一种简单的方法来传输一组受约束的属性,比如粗体和斜体——创建你自己的不依赖于 HTML 的标记系统。或者仅针对这些属性解析 HTML 并使用结果来创建您的属性字符串。
很抱歉我在这里没有更好的消息。
因此,为避免崩溃,您可能需要避免使用NSAttributedString( data:函数本身并编写自己的方式来解析 html。
推荐阅读
- sql - 在 PostgreSQL 中将重叠的间隔分割成更小的、接触的间隔
- geoserver - geoserver 2.8 - 图层不可查询
- python - 如何控制 for 循环内的迭代器值?
- mysql - 在没有数据的空白处比较 SQL 结果集
- laravel - Laravel barryvdh/laravel-dompdf 在一个 pdf 中查看多个组件
- java - 试图调用不存在的方法...更正类路径
- vmware - 迁移到 Steeltoe 3.0 后,steeltoe serilog 动态记录器不工作
- c++ - 如何计算c ++类中的成员偏移量
- java - 元素可以属于多个组的流分组
- python - 从数据框的列中过滤掉关键字(不区分大小写) - Pandas