1

サーバーから画像をダウンロードするアプリがあります。画像は約 56 KB で、少なくとも 30 個あります。ユーザーが接続していないか、Edge 接続 (ダイヤルアップ) を使用している場合があります。

次のように AppDelegate.h で NSURLCache を使用しています。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   
    int cacheSizeMemory = 4*1024*1024; // 4MB
    int cacheSizeDisk = 32*1024*1024; // 32MB
    NSURLCache *sharedCache = [[[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"] autorelease];
    [NSURLCache setSharedURLCache:sharedCache]; 

しかし、何らかの理由で画像をキャッシュしません。インターネット接続が利用可能な状態ですべての画像をロードしてから、エッジネットワークを切断または使用すると、画像が再度取得されます。

4

2 に答える 2

1

編集: NSURLRequest の NSURLRequestReturnCacheDataElseLoad cachePolicy を使用するか、適切な Cache-Control ヘッダーを返す場合、iOS 5 以降はディスク キャッシュをサポートします。

キャッシュに関するこの問題は、AFNetworking FAQで説明されています。

要約すると、iOS では、 でを作成しても(無視されるようです)、NSURLCacheディスク キャッシュ機能が提供されないようです。解決策は、FAQ で提案されているような の他の実装を使用することです。NSURLCachediskCapacity>0NSURLCacheSDURLCache

于 2012-10-25T13:15:04.547 に答える
0

NSURLCacheを使用するには、サーバーが各要求のcache-controlヘッダーを確実に返送するようにサーバーにアクセスする必要があります。(私のシナリオのように)その設定を取得できない、または取得できない場合は、独自のキャッシュレイヤーをロールするか、SDURLCacheやRNCachingURLProtocolなどを使用する必要があります。

于 2013-03-12T17:47:54.337 に答える