NSURLConnection возвращает старые данные - PullRequest
5 голосов
/ 01 января 2012

В моем приложении я загружаю данные JSON с помощью метода NSURLConnection, который выглядит следующим образом:

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

Я получаю и сохраняю данные в методе -didReceiveData:, но если я обновляюмой JSON-файл на моем сервере, NSURLConnection все еще доставляет мне старый JSON, в то время как файл правильно загружен на сервер.Только если я удаляю все приложение из своего iPhone (или iPhone Simulator) и перестраиваю приложение, оно получает новый файл Json.

Кто-нибудь знает решение этой проблемы?

Ответы [ 2 ]

9 голосов
/ 01 января 2012

Вам нужно будет указать NSURLRequest для повторной оценки (если ваш сервер отправляет соответствующие измененные заголовки) или не использовать свой кэш. Вот фрагмент моего проекта JBAsyncImageView (подсказка: используйте NSURLRequestReloadRevalidatingCacheData или 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];
5 голосов
/ 01 января 2012

Самое простое решение для предотвращения кэширования запросов - добавить параметр отметки времени с текущим временем в конце:

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