Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 即使显式返回304,Alamofire响应也始终具有200状态代码_Ios_Iphone_Swift_Alamofire_Http Status Code 304 - Fatal编程技术网

Ios 即使显式返回304,Alamofire响应也始终具有200状态代码

Ios 即使显式返回304,Alamofire响应也始终具有200状态代码,ios,iphone,swift,alamofire,http-status-code-304,Ios,Iphone,Swift,Alamofire,Http Status Code 304,我正在尝试在我的应用程序中创建一些缓存。这就是流程: 用户进入应用程序后,应用程序将检查自上次刷新以来天气是否有任何变化,如果有,服务器将返回200并刷新页面。 否则,服务器返回304,什么也不发生。 我在ios应用程序中使用alamofire,我尝试了其中的任何配置,但没有任何帮助。 真正奇怪的问题是,即使服务器显式返回状态代码304,我的应用程序仍然得到200。 这是代码: if Reachability.isConnectedToNetwork() { let urlreq = N

我正在尝试在我的应用程序中创建一些缓存。这就是流程: 用户进入应用程序后,应用程序将检查自上次刷新以来天气是否有任何变化,如果有,服务器将返回200并刷新页面。 否则,服务器返回304,什么也不发生。 我在ios应用程序中使用alamofire,我尝试了其中的任何配置,但没有任何帮助。 真正奇怪的问题是,即使服务器显式返回状态代码304,我的应用程序仍然得到200。 这是代码:

if Reachability.isConnectedToNetwork() {
    let urlreq = NSMutableURLRequest(URL: NSURL(string: API.feedURL())!,cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData
        , timeoutInterval: 5000)
    Alamofire.request(.GET, urlreq, parameters: ["category_name":category],encoding: ParameterEncoding.URL, headers: API.getHeaders())
                .validate(statusCode: 200..<500)
                .responseJSON { request, response, result in
                    switch result {
                    case .Success(let data):
                        let statusCode = response!.statusCode as Int!
                        if statusCode == 304 {
                            completionHandler(didModified: false, battlesArray: [])
                        } else if statusCode == 200 {
                            let json = JSON(data)
                            var battlesArray : [Battle] = []
                            for (_,subJson):(String, JSON) in json["battles"] {
                                battlesArray.append(Battle(json: subJson))
                            }
                            completionHandler(didModified: true, battlesArray: battlesArray)
                        }
                    case .Failure(_, let error):
                        print ("error with conneciton:\(error)")
                    }
                    SVProgressHUD.dismiss()}
如果可达性.isconnectedtonework(){
设URLEQ=NSMutableURLRequest(URL:NSURL(字符串:API.feedURL())!,cachePolicy:NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData
,timeoutInterval:5000)
请求(.GET,urlreq,参数:[“category_name”:category],编码:ParameterEncoding.URL,头:API.getHeaders()

.validate(statusCode:200..iOS网络代码自行处理3xx代码。您在不正确的情况下使用HTTP状态代码。这不仅仅是一个数字。如果您要创建缓存而不是HTTP缓存,请使用200并返回“缓存”数据中的状态。这是预期的用例。您的应用程序代码只需要担心200个条件,库透明地处理缓存的响应。这解决了问题!