应用程序在 CGContext.drawPDFPage 崩溃并出现 EXC_BAD_ACCESS
App crashes on CGContext.drawPDFPage with a 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
结尾,看起来像这样:
错误是:EXC_BAD_ACCESS
。如果您看到任何可能导致此崩溃的原因,将会对我有很大帮助!
iOS 12
遇到类似崩溃的任何人,情况都在缓存层中,在特定情况下按索引请求 CGPDFDocument
和 CGPDFPage
。
解决方案是按需从持久存储中请求 PDF。
iOS 13
从 iOS 13 开始——我们没有看到任何与此相关的错误,因此 Apple 可能通过从 CGPDFDocument
和 CGPDFPage
类型的值恢复上下文来解决该错误.
我的应用程序在 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
结尾,看起来像这样:
错误是:EXC_BAD_ACCESS
。如果您看到任何可能导致此崩溃的原因,将会对我有很大帮助!
iOS 12
遇到类似崩溃的任何人,情况都在缓存层中,在特定情况下按索引请求 CGPDFDocument
和 CGPDFPage
。
解决方案是按需从持久存储中请求 PDF。
iOS 13
从 iOS 13 开始——我们没有看到任何与此相关的错误,因此 Apple 可能通过从 CGPDFDocument
和 CGPDFPage
类型的值恢复上下文来解决该错误.