gpt4 book ai didi

ios - NSURLCache 的 removeCachedResponseForRequest 没有效果

转载 作者:可可西里 更新时间:2023-11-01 17:17:42 25 4
gpt4 key购买 nike

我创建了一个 NSURLCache 子类,它强制在指定的时间内缓存响应。这运行良好,并且缓存项按预期过期。但是,在尝试使用 NSURLCache 的 removeCachedResponseForRequest: 方法强制删除缓存的响应时,我遇到了问题。

我想要实现的是允许用户强制立即重新加载远程数据。为此,我在发出请求时传递了一个“ignoreCache”标志。我像往常一样构造我的 NSURLRequest,但要求我的 NSURLCache 删除任何以前缓存的给定请求的响应。但是,这似乎没有任何效果,因为缓存的结果仍然存在并在执行请求时使用。

关于 NSURLCache 的文档相当稀少。 NSURLCache header 声明传递给 removeCachedResponseForRequest: 的 NSURLRequest 被用作查找关联的 NSCachedURLResponse 对象的键,但是关于该比较的逻辑给出的信息很少。 NSURLCache 类是否期望接收生成缓存响应的相同 NSURLRequest 实例,或者它只是比较它代表的 NSURL?

希望有人能指出我正确的方向。

var error: NSError? = nil
var URLRequest: NSMutableURLRequest = self.operationManager.requestSerializer.requestWithMethod("GET", URLString: NSURL(string: request.URL, relativeToURL: self.operationManager.baseURL).absoluteString, parameters: request.parameters, error: &error)
URLRequest.cachePolicy = NSURLRequestCachePolicy.ReturnCacheDataElseLoad

// We've been asked to ignore the cache, so remove our previously cached response
if ignoreCache == true {
NSURLCache.sharedURLCache().removeCachedResponseForRequest(URLRequest)
}

这是来 self 的 NSURLCache 子类的 Swift 代码以供引用:

// MARK: - NSURLCache
override func cachedResponseForRequest(request: NSURLRequest!) -> NSCachedURLResponse! {
var cachedResponse: NSCachedURLResponse? = super.cachedResponseForRequest(request)
if(cachedResponse != nil && cachedResponse!.userInfo != nil) {
var cacheDate: NSDate? = cachedResponse!.userInfo![self.cacheExpirationKey] as? NSDate
if(cacheDate != nil) {
var cacheDateLimit: NSDate = cacheDate!.dateByAddingTimeInterval(self.cacheExpirationInterval)
if(cacheDate!.compare(NSDate()) == NSComparisonResult.OrderedAscending) {
self.removeCachedResponseForRequest(request)
} else {
return cachedResponse
}
}
}

// Either our cached data was too old, or we don't have any that match the NSURLRequest
return nil
}
override func storeCachedResponse(cachedResponse: NSCachedURLResponse!, forRequest request: NSURLRequest!) {
var userInfo: NSMutableDictionary = NSMutableDictionary(dictionary: cachedResponse.userInfo)
userInfo[cacheExpirationKey] = NSDate().dateByAddingTimeInterval(self.cacheExpirationInterval)

var modifiedCacheResponse: NSCachedURLResponse = NSCachedURLResponse(response: cachedResponse.response, data: cachedResponse.data, userInfo: userInfo, storagePolicy: cachedResponse.storagePolicy)
super.storeCachedResponse(modifiedCacheResponse, forRequest: request)
}

最佳答案

假设您使用的是 iOS 8,removeCachedResponseForRequest: 不起作用。

参见 http://blog.airsource.co.uk/2014/10/13/nsurlcache-ios8-broken-2/

关于ios - NSURLCache 的 removeCachedResponseForRequest 没有效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25596424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com