2013-07-13 3 views
-1

Я пытаюсь использовать NSURLCache, чтобы мое приложение сохраняло ответы JSON с веб-сервера и не запрашивало его столько.NSURLCache не используется

Я добавил Cache-Control:Max-Age=604800 в заголовки ответов в запросе.

Я добавил следующий код моего приложения AppDelegate.m файла:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    //set up the URL cache 
    NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 
                 diskCapacity:20 * 1024 * 1024 
                  diskPath:nil]; 
    [NSURLCache setSharedURLCache:URLCache]; 
} 

И мой запрос в коде выглядит следующим образом:

NSString *myURLString = [NSString stringWithFormat:@"http://domain.com/api/?location=%@,%@&date=%@&method=%@", latitude, longitude, curDate, methodString]; 

NSLog(@"%@", myURLString); 

NSURL *url = [NSURL URLWithString:myURLString]; 

NSData *jsonData = [NSData dataWithContentsOfURL:url]; 

Я не думаю, что это работает, потому что при запуске с сетевым профилем инструментов я вижу всплеск в сетевом запросе каждый раз, когда изображение загружается, и если я загружаю приложение, тогда он помещает телефон в плоском режиме без загрузки данных (тогда как я подозреваю, что он будет использовать кеш).

Является ли это доказательством того, что кеш не используется/используется? И если да, есть ли у кого-нибудь идеи, почему бы и нет? И, если это не доказательство, кто-нибудь знает, как лучше проверить кеширование?

Большое спасибо.

+2

'dataWithContentsOfURL:' не предназначен для использования для удаленных URL-адресов. Это может быть одной из причин проблемы. Я бы предложил вам повторить анализ с использованием 'NSURLConnection'. – CouchDeveloper

+0

Ах, это кажется правильным. Я заменю на 'NSURLConnection'. Благодарю. – samiles

+0

repost http://stackoverflow.com/questions/17629214/how-to-test-check-use-of-nsurlcache – vikingosegundo

ответ

0

+[NSData dataWithContentsOfURL:] не дает никаких гарантий относительно того, какую модель кэширования она последует. На практике в настоящее время он сознательно игнорирует любой кеш.

Вместо этого вы должны использовать NSURLConnection, который предоставляет правильные элементы управления кешированием.