2011-06-20 13 views
3

を更新していない私、私が呼ばれるたび-(void)viewWillAppear:animatedを呼び出していますNSURLConnectionを私はその後、このNSURLConnection

receivedData = [[NSMutableData data] retain]; 
NSString *urlString = @"<URL hidden>"; 
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30.0]; 
[NSURLConnection connectionWithRequest:request delegate:self]; 

ようにそれをやっている

(それはそれだけのテストのためだ、今だけのためです)持っているIこれら三つのデリゲートメソッドがあります:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [receivedData appendData:data]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    NSString *returnString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding]; 
    usersPhotos = [[NSMutableArray alloc] initWithArray:[[returnString JSONValue] objectForKey:@"data"]]; 
    [self loadAnnotations]; 

    NSLog(@"%@", returnString); 

    [returnString release]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    [self loadAnnotations]; 
} 

を私はreturnStringを変更する必要があります確信しているにもかかわらず(私はurlStringでサイトにアクセスして確認することができますそれは変わった)それは常に同じです。

これは、最初の接続から取得したデータを再利用しているかのようです。

これはなぜですか?

答えて

6

が、それはあなたのキャッシュポリシーをする必要があり、私は正しい情報を有する第二に更新します:

は、このメソッドを追加します。


UPDATE

にごcahceポリシーを設定してみてください:cachePolicy:NSURLRequestReloadIgnoringCacheData

それは次のようになります。何を言うことは必要であれば、実際のコードは、単に連結wouldntの

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30.0]; 
+0

それはトリックでした!どうもありがとうございました!私は何時間も私の髪を引っ張ってきた。私はそれを考え出したはずです:-)ありがとう。 – simonbs

+0

+1。 NSURLRequestReturnCacheDataElseLoadは、キャッシュデータを返すか、キャッシュデータがない場合は、ソースからデータを返すことを意味します。したがって、ソースからのデータが最初に読み込まれた唯一の時間は、残りの部分にキャッシュされたデータを使用するだけでした。 – thomashw

+0

はい、それは非常にスマートです - なぜ私が最初にそれを使ったのか分かりません。 – simonbs

0

バッファーを再使用する場合は、そのバッファーを空にする必要があります。

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    [receivedData setLength:0]; 
} 
+0

受信した文字列の怒りと再び? '[receivedData appendData:data];' –

+0

おっとり - 私は完全に間違っていました。私は、バッファがインスタンス変数であると仮定しました。質問を完全に読まなかった。 – thomashw