2017-01-26 14 views
0

私は、ユーザーが特定のビューを訪れるたびにイメージをダウンロードして表示しています。効率を上げるために、データベースからフェッチするのではなく、ユーザーがすでにダウンロードしたイメージを持っているので、キャッシュを開始したいと思っています。Swiftでの画像のキャッシュ?

私の研究から、HanekeSwift,KingFisher、およびNukeのような、あなたのキャッシュを扱うSwiftライブラリがたくさん見つかりました。私は、これらのライブラリの1つを使用してコアデータにイメージをダウンロードするだけの違いが何であるか疑問に思っています。

私が知る限り、初めてユーザーが画像をダウンロードしたときに、それらをコアデータに保存して、次回にキーで存在するかどうかを確認することができます。代わりにこれらのライブラリの1つを使用することに利点がありますか?

+0

コアデータに画像を保存する理由ファイルとして保存します。 – rmaddy

+0

ファイルを保存するだけでいいのか分かりませんでしたが、このようなことについて話していますか? https://www.hackingwithswift.com/example-code/media/how-to-save-a-uiimage-to-a-file-using-uiimagepngrepresentation – MarksCode

+0

アプリの期間中だけ画像をメモリに保存したい場合NSCacheをとして使用し、NSData/Dataとして保存し、UIImage(data:_)でレンダリングします。 – hooliooo

答えて

2

イメージをコアデータに保存しないでください。それらをファイルに保存しておきたい場合は、必要に応じて、パスまたはファイル名、またはイメージに関するその他の属性をコアデータに保存することができます。たとえば、次のコードを使用して、画像をアプリドキュメントディレクトリに保存することができます。

let dir = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0] as String 

if let filePath = dir.stringByAddingPathComponent("filename.png"){ 
    try? UIImagePNGRepresentation(image)?.write(to: URL(fileURLWithPath: filePath)) 
} 

あなたは念のサブフォルダが作成されている作っていない場合は、それを作成するために、FileManagerのを使用したサブフォルダに保存したい場合。

+0

画像に関するデータをコアデータに保存する必要がありますか?検索したい後で、私はイメージの名前を持っていると仮定して? – MarksCode

+0

ありがとうございました。完全パスが変更されているためにもパスを保存しないでください – muescha

+0

@MarksCodeうまくいけば、代替としてファイルの名前としてユーザーの属性を使用できます。たとえば、ユーザ名がある場合は、名前を '' \(user.username).png "'とし、その名前のファイルがイメージディレクトリに存在するかどうか調べます。存在するかどうかより多くのデータをイメージに格納する場合は、イメージを保存するときにimageWidthまたはimageHeightなどのコアデータに属性を格納します。 –

関連する問題