Я надеюсь, что кто-то может пролить свет на несколько вещей, которые я изучал, но не добился больших успехов.
Я бы хотел использовать NSURLCache для возврата кэшированных ответов на вызовы API, которые я делаю в приложении iOS. Когда устройство подключено к сети, я хотел бы вернуть кешированный ответ, если он достаточно недавний, в противном случае извлечение из удаленного. Когда устройство отключено, я хотел бы немедленно вернуть кешированный ответ (если он есть) независимо от его возраста.
Я использую AFNetworking
. API-вызовы, которые я делаю, относятся к серверу, которым я управляю. Протокол HTTPS. Заголовок ответа Cache-Control
в настоящее время "max-age=0, public"
. В настоящее время я не устанавливаю заголовки заголовков, связанных с кешем (должен ли я?). Я установил политику кэша запросов как NSURLRequestReturnCacheDataDontLoad
в автономном режиме и использую по умолчанию NSURLRequestUseProtocolCachePolicy
в режиме онлайн. И я вижу запросы и их ответы по умолчанию Cache.db
на диске. Однако, когда я в автономном режиме, все запросы не выполняются (кэшированные ответы (несмотря на то, что они были кэшированы) используются/возвращаются.
Per http://nshipster.com/nsurlcache/ Я инициализирую sharedURLCache
в didFinishLaunchingWithOptions
и поставлю блок AFNetworking setCacheResponse
примерно так:
NSMutableDictionary *mutableUserInfo = [[cachedResponse userInfo] mutableCopy]; NSMutableData *mutableData = [[cachedResponse data] mutableCopy]; NSURLCacheStoragePolicy storagePolicy = NSURLCacheStorageAllowed; return [[NSCachedURLResponse alloc] initWithResponse:[cachedResponse response] data:mutableData userInfo:mutableUserInfo storagePolicy:storagePolicy];
Я прочитал эти и другие сообщения по теме:
http://petersteinberger.com/blog/2012/nsurlcache-uses-a-disk-cache-as-of-ios5/ http://blackpixel.com/blog/2012/05/caching-and-nsurlconnection.html
Мне интересно, удалось ли кому-нибудь из них достичь этой функциональности до использования стандартного NSURLCache
(также заинтересованного в истории успеха с участием SDURLCache
, но Питер С. говорит, что с кешированием iOS5 поддерживается, поэтому SDURLCache
больше не требуется, т.е. я хотел бы использовать встроенный кеш по умолчанию).
Спасибо заранее!