URLから画像をダウンロードしてデバイスのディスクスペースにキャッシュするには、AlamofireImageを使用します。私はこれについていくつかの記事を読んで、AlamofireImageがImageDownloaderクラスの助けを借りてこれをサポートしていることを知りました。最も興味深い情報が与えられましたin this SO answerAlamofireImageディスクキャッシュが機能しない
私はImageDownloader用のカスタムNSURLCacheを設定して、画像をディスクに直接キャッシュするようにしました。私はメモリ容量を0に設定しました。次に、このカスタムImageDownloaderを使用してイメージをダウンロードします。ディスクパスに指定したフォルダはディスク上に作成されますが、残念ながら空のままで、イメージは決してキャッシュされません。
**編集**キャッシュされた応答は、キャッシュディレクトリ内のフォルダに保存されず、フォルダの隣のデータベースファイルに保存されます。
誰でも私がここで間違っていることを教えてもらえますか?読んでくれてありがとう!
func diskImageDownloader(diskSpaceMB: Int = 100) -> ImageDownloader {
let diskCapacity = diskSpaceMB * 1024 * 1024
let diskCache = NSURLCache(memoryCapacity: 0, diskCapacity: diskCapacity, diskPath: "alamofireimage_disk_cache")
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.URLCache = diskCache
let downloader = ImageDownloader(configuration: configuration)
UIImageView.af_sharedImageDownloader = downloader
return downloader
}
func getProfileImage(atURL url: String, onComplete: SRServiceResponse<UIImage> -> Void) {
guard let imageURL = NSURL(string: url) else
{
// TODO: Fail here
return
}
let request = NSURLRequest(URL: imageURL)
let imageDownloader = self.diskImageDownloader()
imageDownloader.downloadImage(URLRequest: request) { (response) in
switch response.result
{
case .Success(let image):
// Do something
case .Failure(let error):
// Do something
}
}
}
おかげで
。実際、私のイメージレスポンスには最大年齢のヘッダーがありませんでした。また、キャッシュされた応答は、キャッシュディレクトリ内のフォルダに保存されず、フォルダの横にあるデータベースファイルに保存されることに注意することも重要です。 –