1

リモート API から多くの情報を取得する必要がある iOS アプリを作成しています。完全に問題なくキャッシュできる多くの http リクエストがありますが、NSURLConnection十分に積極的にキャッシュしていないようです: アプリを強制終了して再起動するたびに、すべてのリクエストがキャッシュ (iOS 5はディスク キャッシュを使用する必要があります)。同じリクエストを (アプリの有効期間内に) 2 回行うと、キャッシュから取得されます。

ポリシーを使用してNSURLRequestReturnCacheDataElseLoadおり、http サーバーのキャッシュ制御ヘッダーが設定されているため、すべてをキャッシュできます。

したがって、問題は、アプリが起動するたびにすべてのリクエストが再度行われることです。これがディスクから来ないのはなぜですか?

編集: この問題は、URL にクエリがある場合にのみ発生するようです。たとえば、http://www.apple.com/をリクエストすると、すべて問題なく、アプリを新たに起動すると、実際にはリクエストは行われません。http://www.apple.com/?testに変更すると、最初のリクエストが常に行われます。

編集2TTURLRequest(three20の一部)のように見えSDURLCache、解決策です。

4

1 に答える 1

1

私自身の質問に答える:

解決策は、SDURLCache をプロジェクトに追加してから、次のコードを- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsメソッドに追加することです。

SDURLCache *URLCache = [[SDURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:24 * 1024 * 1024 diskPath:[SDURLCache defaultCachePath]];
[NSURLCache setSharedURLCache:URLCache];

これは、クエリを含む URL を含め、キャッシュに対してより積極的です。

于 2012-10-22T16:40:21.317 に答える