微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

应用程序在CGContext.drawPDFPage上使用EXC_BAD_ACCESS崩溃

如何解决应用程序在CGContext.drawPDFPage上使用EXC_BAD_ACCESS崩溃

我的应用程序在 CGContext.drawpdfpage 随机崩溃,而无法始终如一地重现该错误。它主要发生在iPad上。代码看起来像这样:

override func draw(_ layer: CALayer,in ctx: CGContext) {

  UIGraphicsPushContext(ctx)
  ctx.saveGState()

  defer {
    ctx.restoreGState()
    UIGraphicsPopContext()
  }

  ctx.setFillColor(UIColor.white.cgColor)
  ctx.fill(viewBounds)

  ctx.translateBy(x: 0,y: viewBounds.height)
  ctx.scaleBy(x: 1,y: -1)
  ctx.scaleBy(x: pdfScale,y: pdfScale)

  ctx.interpolationQuality = .high
  ctx.setRenderingIntent(.defaultIntent)

  ctx.beginpdfpage(nil)
  ctx.drawpdfpage(pdfpage) // This is where the crash happens
  ctx.endpdfpage()
}

堆栈跟踪以CGPDFObjectGetReference结尾,如下所示:

Stack

错误是:EXC_BAD_ACCESS。如果您发现任何可能导致此崩溃的信息,将对我有很大帮助!

解决方法

iOS 12

遇到类似崩溃的任何人,都属于缓存层,在特定情况下按索引请求CGPDFDocumentCGPDFPage

解决方案是按需从持久性存储中请求PDF。

iOS 13

从iOS 13开始-我们没有看到与此相关的任何错误,因此Apple可能通过从CGPDFDocumentCGPDFPage类型的值还原上下文来解决了该错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。