Как кэшировать файл, например PDFDocument, чтобы предотвратить повторную загрузку и повысить удобство работы с пользователем - swift? - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть приложение с представлением коллекции, которое отображает эскизы 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)")

        }
    }

}

}
...