2015-07-14 16 views
6

Ho una situazione qui, utilizzo l'API di riposo con AFNetworking per recuperare una risorsa specifica (richiesta GET) dal nostro back-end. Quando controllo il back-end con il browser, il risultato è 165 ma in un dispositivo specifico (uno specifico iPhone 6 plus) il risultato è 5, in qualsiasi altro dispositivo recupero la risposta corretta. Penso che qualcosa sia stato memorizzato nella cache del risultato su questo dispositivo ma non abbia trovato nulla su questo dispositivo specifico.Memorizzazione cache indesiderata di una richiesta GET con AFNetworking

ho cancellato l'applicazione e installato di nuovo e funziona male di nuovo, in modo da NSURLCache non è il problema sia

codice che uso per recuperare dati dal back-end, funziona benissimo qualsiasi altro dispositivo, esso doesn' t lavorare su quel dispositivo specifico. (dal modo in cui io uso lo stesso nome utente e password per controllare tutti i dispositivi e browser) quindi questo non è il caso.

AFHTTPRequestOperationManager* manager = [AFHTTPRequestOperationManager manager]; 
manager.requestSerializer = [AFJSONRequestSerializer serializer]; 

[manager.requestSerializer setValue:[[NSUserDefaults standardUserDefaults] valueForKey:TOKEN_ID_KEY] forHTTPHeaderField:TOKEN_HTTP_HEADER_NAME]; 
[manager GET:[NSString stringWithFormat:@"%@%@", BASE_URL, PROFILE_URL] parameters:nil success:^(AFHTTPRequestOperation* operation, id responseObject) { 
    NSLog(@"profile info request accepted with response : %@",responseObject); 
    profile = [[Profile alloc] initWithDictionary:responseObject]; 
    [self.tableView reloadData]; 
} failure:^(AFHTTPRequestOperation* operation, NSError* error) { 
    NSLog(@"profile info request failed with eroor : %@" , [error localizedDescription]) ; 
}]; 
+0

puoi pubblicare il pezzo di codice in cui si invia la richiesta e gestire la risposta? –

+0

Informazioni sulla non memorizzazione nella cache della richiesta - 'AFNetworking' utilizza il' NSURLCache' condiviso, è possibile seguire questa risposta per annullare la memorizzazione nella cache della propria app: http://stackoverflow.com/a/17063060/2242359 –

+0

@AvielGross Ho aggiunto il codice, Non penso che sia qualcosa nel mio codice sbagliato, perché funziona su qualsiasi altro dispositivo e sui browser, non funziona solo su questo specifico dispositivo –

risposta

3

Se si scopre nulla per risolvere il problema allora si può aggiungere il tempo corrente alla fine dell'URL. È successo anche a me e ho aggiunto qualcosa in più al mio URL in modo che sia sempre una nuova richiesta.

long currentTime = (long)CFAbsoluteTimeGetCurrent(); 
NSString *urlString = [NSString stringWithFormat:@"%@%@?%ld", 
               BASE_URL, 
               PROFILE_URL, 
               currentTime]; 

Questa è solo una soluzione. Spero che questo aiuti

1

L'approccio più semplice sarebbe quella di disabilitare solo il globale NSURLCache, anche se vi consiglio contro di essa.

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 
                 diskCapacity:0 
                  diskPath:nil]; 
[NSURLCache setSharedURLCache:sharedCache]; 
+0

prima non posso disabilitare la cache, perché usiamo la mappa su questa app in modo che le tessere non vengano memorizzate nella cache se la disattivo, in secondo luogo ho cancellato l'app e l'ho installata di nuovo e la richiesta non funziona di nuovo. quindi questo non mi aiuterà –