テキストと画像(右側の画像)が表示されたカスタムセルを含むUITableViewがあります。最初はすべて正常に機能していましたが、スクロールするとテーブルビュー全体が遅れていることに気付きました。これは、セルを再利用するときにセルが画面に入ったときに、アプリがセルの画像をダウンロードした可能性があるためです。ダウンロードした画像を保存するためにNSCacheを追加し、imageNameが存在する場合はロードするようにcellForRowAtIndexPathに指示しました。存在しない場合は、インターネットから再度ダウンロードします。ただし、キャッシュは非常に短期間のストレージであるため、ホームボタンを使用してアプリを終了し、再入力すると、一部の画像のみが残り、画像を再度ダウンロードする必要があります。
キャッシュよりも長期間画像を保存するための最良の方法を見つけようとしています。NSDirectoryとアプリライブラリへの保存について読んだことがありますが、まだ理解していません。
最も論理的な解決策は、次のようなことを行うことだと思います。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
/*stuff*/
NSString *imageName = [dictionary objectForKey:@"Image"];
UIImage *image = [--Cache-directory-- objectForKey:imageName]; //Try to get it from cache
if(image) //If image was received from cache:
{
cell.imageView.Image = image;
}
else //If not in cache:
{
image = [--local-directory-- objectForKey:imageName]; //Check some local directory
if(image) //If image received from directory:
{
cell.imageView.Image = image;
// + Also save it to the cache?
}
else //If image was in neither cache or local directory, get it from the website with given URL
{
image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:imageURL]];
//Then save to cache and to file?
}
}
}
画像は頻繁に変更または切り替えられますが、事前にアプリに実装するつもりはないので、画像が追加されるたびに更新をリリースする必要があります。
これは私には論理的に思えるものです。私は正しい方向に進んでいますか?そして、どうすればローカルディレクトリを「呼び出す」ことができますか?たとえば、NSDirectoryオブジェクトなどに画像を追加すると、毎回リセットされませんか?ローカルフォルダにアクセスするにはどうすればよいですか?