0

NSURLConnectionを使用すると、スティッキーキャッシュに問題が発生します。次の行を使用してNSMutableURLRequestを作成します。

 NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60];
[request setHTTPMethod:@"POST"];
[request setValue:@"text/javascript,application/json,application/javascript;q=0.9,*/*;q=0.8" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: requestData];

次に、次のように接続します。

NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self];

表面的にはすべてが正常に機能し、サーバーが送信するjsonオブジェクトを接続してプルします。サーバー上のjsonオブジェクトを更新して別のノードが含まれるようにした後、アプリを介して上記のようにURLを要求すると、キャッシュされたバージョンのjsonオブジェクトが返されます。受信したデータをで出力することで証明されたように

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

要求されたURLにタイムスタンプを追加しようとしましたが、キャッシュされたバージョンを受け取りました。各リクエストの前にreceivedData変数をnilにリセットし、connection:didReceiveData:で変数を再初期化しますが、キャッシュされたバージョンを取得しています。

キャッシュを強制しないようにデリゲートメソッドを設定することもできます。

- (NSCachedURLResponse *) connection:(NSURLConnection *)connection
               willCacheResponse:(NSCachedURLResponse *)cachedResponse{
    return nil;
}

編集:ブラウザでリクエストされたURLを押すことで変更された応答を確認しましたが、その後もアプリはキャッシュされたデータを使用します。

だから私の質問は、どうすればキャッシュを完全に破壊できますか?

ありがとう、ブルース

4

1 に答える 1

1

私は以下を使用してキャッシュを削除する方法を見つけました:

[[NSURLCache sharedURLCache] removeAllCachedResponses];

残念ながら、それでも問題は解決しなかったため、Apple Developers Forumの親切な人が提案したように、パケットスニファを使用してサーバーから送信されたものを正確に確認し、サーバーが誤った情報を送信していることを確認しました。

この問題を調査してくれたすべての人に感謝します。

ブルース

于 2012-04-24T15:59:24.447 に答える