iOS应用程序在UIGraphicsEndPDFContext()崩溃

时间:2017-08-23 12:31:48

标签: ios swift pdf exc-bad-access

我想从当前视图创建一个PDF。以下是我的代码。

func createPdfFromView(saveToDocumentsWithFileName fileName: String) -> CGPDFDocument?
{
    let pdfData = NSMutableData()
    var pdfDoc: CGPDFDocument!
    UIGraphicsBeginPDFContextToData(pdfData, self.view.bounds, nil)
    UIGraphicsBeginPDFPage()

    guard let pdfContext = UIGraphicsGetCurrentContext() else { return nil }

    self.view.layer.render(in: pdfContext)
    UIGraphicsEndPDFContext()

    if let documentDirectories = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first {
        let documentsFileName = documentDirectories + "/" + fileName
        debugPrint(documentsFileName)
        pdfData.write(toFile: documentsFileName, atomically: true)
        let localUrl  = "file://"+documentsFileName as CFString
        let pdfDocumentRef = CFURLCreateWithFileSystemPath(nil, localUrl, CFURLPathStyle.cfurlposixPathStyle, false)
        pdfDoc = CGPDFDocument(pdfDocumentRef!)
        return pdfDoc
    }

    return nil
}

但我的应用程序经常崩溃 UIGraphicsEndPDFContext()出现EXC_BAD_ACCESS错误。不知道为什么会这样。我是Swift的新手。

1 个答案:

答案 0 :(得分:0)

对我来说,这是在我还尝试通过CGContextRelease释放后发生的:

UIGraphicsEndPDFContext();
CGContextRelease(pdfContext);//<-comment out this to solve

我只需要UIGraphicsEndPDFContext(); 由于某些原因,即使在调用EndPDFContext之后再调用CGContextRelease,仍然会在EndPDFContext行上引起EXC_BAD_ACCESS,可能是异步问题。