NSURLCache
当 URL 包含更改的查询项时,是否可以使用缓存响应?例如,我们添加 Mashery 所需的“sig=XXXXXX”查询项,每个请求都会更改。
如果没有,是否有解决方法?
NSURLCache
当 URL 包含更改的查询项时,是否可以使用缓存响应?例如,我们添加 Mashery 所需的“sig=XXXXXX”查询项,每个请求都会更改。
如果没有,是否有解决方法?
通过子类化NSURLCache
和覆盖其缓存方法来解决。
在每个被覆盖的方法中,我在调用超类的方法之前从请求中删除了查询项。
例如:
override func storeCachedResponse(cachedResponse: NSCachedURLResponse, forRequest request: NSURLRequest) {
let strippedRequest = removeQueryItemFromRequest(self.queryItemName, request: request)
if let url = strippedRequest.URL {
let response = NSURLResponse(URL: url, MIMEType: cachedResponse.response.MIMEType, expectedContentLength: Int(cachedResponse.response.expectedContentLength), textEncodingName: cachedResponse.response.textEncodingName)
let newCachedResponse = NSCachedURLResponse(response: response, data: cachedResponse.data)
super.storeCachedResponse(newCachedResponse, forRequest: strippedRequest)
}
else {
super.storeCachedResponse(cachedResponse, forRequest: request)
}
}
self.queryItemName
是传递给自定义初始化程序的存储属性。