У меня есть приложение с представлением коллекции, которое отображает эскизы PDF-документов. Когда пользователь нажимает на миниатюру, появляется новый UIViewController вместе с PDFDocument. Я пытаюсь кэшировать PDFDocument, чтобы приложение не каждый раз загружало PDFDocument с сервера. Я не был успешным. Я использую PDFKit, чтобы представить PDFDocument. Ниже мой код:
Когда пользователь нажимает на миниатюру в представлении коллекции, следующий стек UIViewController помещается в стек и отображает PDFDocument:
@IBOutlet weak var myPDFView: PDFView!
let pdfCache = NSCache<NSString, PDFDocument>.init()
func loadPDF(pdfURL: String) -> Void {
// FIND IF PDF DOCUMENT IS ALREADY IN CACHE ON KEY 'pdfURL'
if let documentToCache = self.pdfCache.object(forKey: pdfURL as NSString){
self.myPDFView.document = (documentToCache as! PDFDocument)
self.myPDFView.displayMode = .singlePage
self.myPDFView.autoScales = true
print("PDF FROM CACHE!")
return
}
.....
// Not found in cache. Download pdfDocument
Alamofire.request(pdfURL).responseData { response in
if let data = response.data{
DispatchQueue.main.async{
let document = PDFDocument.init(data: data)
// STORE PDF DOCUMENT TO CACHE
self.pdfCache.setObject(document!, forKey: pdfURL as NSString)
// DISPLAY PDF
self.myPDFView.document = document
self.myPDFView.displayMode = .singlePage
self.myPDFView.autoScales = true
print("PDF DOWNLOADED: \(pdfURL)")
}
}
}
}