2012-01-01 17 views
5

Nella mia domanda, sto caricando i dati JSON utilizzando il metodo NSURLConnection, quella che appare come questo:NSURLConnection sta tornando dati vecchi

NSURLRequest *request = [[NSURLRequest alloc] initWithURL: 
           [NSURL URLWithString:@"theurl"]]; 
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request 
                   delegate:self]; 
[theConnection start]; 

ricevo e salvare i dati nel metodo -didReceiveData:, ma se aggiorno il mio File JSON sul mio server, lo NSURLConnection mi offre ancora il vecchio JSON, mentre il file è stato caricato correttamente sul server. Solo se elimino l'intera app dal mio iPhone (o iPhone Simulator) e ricostruisco l'applicazione, riceve il nuovo file Json.

Qualcuno conosce una soluzione per questo problema?

+0

Suoni come il risultato è stato memorizzato nella cache, vedere [questa risposta] (http://stackoverflow.com/questions/405151/is-it-possibile-per-prevent-an-nsurlrequest-da-caching-data-or-remove-cached -dat) – Douglas

+0

Grazie! La tua risposta e quella di Jesse hanno funzionato per me! – Jelle

risposta

9

È necessario comunicare allo NSURLRequest (se il server invia le intestazioni modificate appropriate) o non utilizzare la cache. Ecco un frammento del mio JBAsyncImageView progetto (suggerimento: Utilizzare NSURLRequestReloadRevalidatingCacheData o NSURLRequestReloadIgnoringLocalCacheData):

// Create request 
self.imageRequest = [[NSURLRequest alloc] initWithURL:imageURL 
              cachePolicy:(self.cachesImage) ? NSURLRequestReturnCacheDataElseLoad : NSURLRequestReloadIgnoringLocalCacheData 
             timeoutInterval:self.downloadTimeoutInterval]; 

// Begin download 
self.imageData = nil; 
self.imageConnection = [[NSURLConnection alloc] initWithRequest:self.imageRequest 
                 delegate:self 
               startImmediately:YES]; 
+1

Grazie mille per le tue risposte! Ha funzionato per me! – Jelle

+0

Mi sono imbattuto in questo problema quando è stato lanciato iOS 7. La soluzione sopra NON ha risolto il mio problema. Dopo aver provato un paio di cose diverse ho dovuto usare la soluzione seguente (aggiungendo timestamp per richiedere). –

+0

la documentazione dice che "NSURLRequestReloadIgnoringLocalCacheData" non è implementato? –

5

La soluzione più semplice per evitare richiesta la memorizzazione nella cache è quello di aggiungere un parametro timestamp con il tempo corrente alla fine:

http://example.com/api.json?my=args&timestamp=2344992923 
+1

In realtà, è probabilmente più semplice dire a 'NSURLRequest' di rivalutare o non memorizzare nella cache i dati --- piuttosto che hackerare la richiesta HTTP. Per le richieste AJAX, questo sarebbe il modo più semplice. Su iOS, tuttavia, non così tanto. –

+1

@JesseBunch Il metodo Timestamp ha un vantaggio in caso di cache del proxy mal configurata sul lato server o proxy. – iHunter

+0

Vero, ma se dici di non usare la cache non devi preoccupartene. E per quello che vale, non ti ho minimizzato. –

Problemi correlati