2011-06-20 50 views
3

我有一個NSURLConnection的這我打電話,每次-(void)viewWillAppear:animated被稱爲(這只是現在,它只是用於測試)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]; 

然後我有這三個委託方法:

- (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

它應該是:

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

如果你說什麼是必要的,難道不實際的代碼正好連接的收到字符串angain和再次? '[receivedData appendData:data];' –

+0

哎呀 - 我完全錯了。我認爲緩衝區是一個實例變量。沒有完全讀完這個問題。 – thomashw