Nsurlconnection NSURLrequestReturnCacheDataElLoad在第一次请求时未从缓存加载?

Nsurlconnection NSURLrequestReturnCacheDataElLoad在第一次请求时未从缓存加载?,nsurlconnection,nsurlcache,Nsurlconnection,Nsurlcache,我正在创建一个iOS应用程序,它需要从远程API获取大量信息。有很多http请求可以很好地缓存,但似乎NSURLConnection缓存不够积极:每次我关闭应用程序并重新启动它时,所有请求都会再次发出,而不是来自缓存(iOS 5应该使用磁盘缓存)。如果我第二次(在应用生命周期内)发出相同的请求,它确实来自缓存 我使用的是NSURLRequestReturnCacheDataElseLoad策略,http服务器上的缓存控制头被设置为可以缓存所有内容 因此,问题在于每次启动应用程序时都会再次发出所有

我正在创建一个iOS应用程序,它需要从远程API获取大量信息。有很多http请求可以很好地缓存,但似乎
NSURLConnection
缓存不够积极:每次我关闭应用程序并重新启动它时,所有请求都会再次发出,而不是来自缓存(iOS 5应该使用磁盘缓存)。如果我第二次(在应用生命周期内)发出相同的请求,它确实来自缓存

我使用的是
NSURLRequestReturnCacheDataElseLoad
策略,http服务器上的缓存控制头被设置为可以缓存所有内容

因此,问题在于每次启动应用程序时都会再次发出所有请求。为什么这不是来自磁盘

编辑:似乎只有在url中有查询时,才存在此问题。例如,当我请求时,一切正常,在新的应用程序启动时,实际上没有提出任何请求。当我更改为时,始终会发出第一个请求


编辑2:看起来
TTURLRequest
(三个20的一部分)和
SDURLCache
是解决方案。

回答我自己的问题:

解决方案是将SDURLCache添加到项目中,然后将此代码添加到
-(BOOL)应用程序:(UIApplication*)应用程序didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
方法:

SDURLCache *URLCache = [[SDURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:24 * 1024 * 1024 diskPath:[SDURLCache defaultCachePath]];
[NSURLCache setSharedURLCache:URLCache];

这在缓存方面更具攻击性,包括带有查询的URL。

回答我自己的问题:

解决方案是将SDURLCache添加到项目中,然后将此代码添加到
-(BOOL)应用程序:(UIApplication*)应用程序didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
方法:

SDURLCache *URLCache = [[SDURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:24 * 1024 * 1024 diskPath:[SDURLCache defaultCachePath]];
[NSURLCache setSharedURLCache:URLCache];
这对于缓存(包括带有查询的URL)来说更具攻击性