2013-11-02 6 views
6

В моем проекте я использую AFNetworking для загрузки данных из Интернета. Я использую NSURLRequestUseProtocolCachePolicy на моем NSURLRequest для обслуживания кэшированных данных пользователя (если кеш действителен). Это мой код:Обработка кеша AFNetworking и ответа

Запрос метод: метод

// create NSURL request 
NSURLRequest *request = [ServerFactory URLGETRequestWithURL:url]; 

//creating AFHTTPRequestOperation 
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 

//set serializaer 
operation.responseSerializer = [AFJSONResponseSerializer serializer]; 

//need to specify that text is acceptable content type, otherwise the error occurs 
operation.responseSerializer.acceptableContentTypes = [MyRepository acceptableContentTypes]; 

//running fetch request async 
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
    //parse data 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    //error handling 
}]; 

//start async operation 
[operation start]; 

Допустимые типы контента

+ (NSSet *)acceptableContentTypes 
{ 
    return [NSSet setWithObjects:@"application/json", @"text/plain", @"text/html" ,nil]; 
} 

ServerFactory получают методы

+ (NSURLRequest *)URLGETRequestWithURL:(NSString *)URL 
{ 
    NSMutableURLRequest *request = [[ServerFactory URLRequestWithURL:URL] mutableCopy]; 
    [request setCachePolicy:NSURLRequestUseProtocolCachePolicy]; 
    [request setHTTPMethod:@"GET"]; 
    return request; 
} 

+ (NSURLRequest *)URLRequestWithURL:(NSString *)URL 
{ 
    // creating NSURL to give to NSURLRequest 
    NSURL *theURL = [NSURL URLWithString:URL]; 

    //adding service version in http header 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:theURL]; 
    [request addValue:HTTP_HEADER_VERSION_VALUE forHTTPHeaderField:HTTP_HEADER_VERSION_NAME]; 

    //returing request 
    return request; 
} 

Теперь я хотел бы перейти к новой логике:

  • Получить кэшировать данные
  • Если кэшированные данные действительны
    • Подавать пользователю кэшированных данных
    • диспетчерский новый запрос с If-Modified-Since заголовка установлен извлеченной отметки времени в кэше данных
    • Сервер respondes 304 Not Modified если кэш еще хорошо, или 200 OK, если есть новые данные
    • обновления пользовательского интерфейса с новыми данными
  • Если экс данные кэша pired
    • Получить новые данные из Интернета

Поэтому в основном я хотел бы служить кэшированные данные, но проверить, если мой кэшированные данные по-прежнему действует на сервере, или если есть новые данные для загрузки. Есть ли способ достичь этого? Я пробовал с setCacheResponseBlock на AFHTTPRequestOperation, но я не могу получить кешированную метку данных. Есть ли более «разумный» способ сделать это?

+0

Я использую AFNetworking 2.0 – paxx

+0

Отметьте эту тему, это может вам помочь: http://stackoverflow.com/a/21556002/514181 – Darrarski

ответ

1

Заканчивать AFNetworking : How to know if response is using cache or not ? 304 or 200

«Я нашел способ за счет экономии модификации Дата размещения ассоциированного с запросом, и я сравниваю эту дату, когда AFNetWorking ответы на меня.

не так чисто, как я намереваюсь, но работает ... "

Смежные вопросы