以下全是个人理解,如有错误,欢迎指正。
网络请求第一步,通常需要判断网络的连接状态以及网络的类型。常用到的网络监控类库比如通过AFNetworkReachabilityManager的对象属性reachable来进行判断,如果网络连接失败,则终止后面的逻辑,提醒用户,网络连接失败,请检查网络连接.这里同时推荐使用reactiveCocoa对AFNetworkReachabilityManager实例属性networkReachabilityStatus进行监听,一旦networkReachabilityStatus发生变化,比如切换到wifi,移动蜂窝网络,失去网络连接等状况进行提醒。
网络请求第二步,拿NSUrlRequest举例子,设置一个不读取缓存的延迟5秒过期的NSUrlRequest对象。
这里,首先判断是否返回error,因为在这请求之前判断过客户端网络,网络ok的时候才会进行到这一步,所以如果依然返回error,如果请求的url没问题的话,那么就可以判定服务器繁忙或者服务器宕机。
如果正确返回response,并且状态代码为200 ,那么可以继续写正常的程序逻辑。
如果response的状态代码不为200比如啥404,501等等,那么可以判定为啥?服务器连接失败?好像只能这么写。。。。
网络请求第一步,通常需要判断网络的连接状态以及网络的类型。常用到的网络监控类库比如通过AFNetworkReachabilityManager的对象属性reachable来进行判断,如果网络连接失败,则终止后面的逻辑,提醒用户,网络连接失败,请检查网络连接.这里同时推荐使用reactiveCocoa对AFNetworkReachabilityManager实例属性networkReachabilityStatus进行监听,一旦networkReachabilityStatus发生变化,比如切换到wifi,移动蜂窝网络,失去网络连接等状况进行提醒。
网络请求第二步,拿NSUrlRequest举例子,设置一个不读取缓存的延迟5秒过期的NSUrlRequest对象。
var request = NSURLRequest(URL: url, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData, timeoutInterval: 5)
然后发起一个异步的网络请求:
NSURLConnection .sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: { (response, data, error) -> Void in
if error != nil{
println(error)
return;
}
var res:NSHTTPURLResponse = response as! NSHTTPURLResponse
if res.statusCode == 200 {
var dic = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary
}else{
println(res)
}
})
这里,首先判断是否返回error,因为在这请求之前判断过客户端网络,网络ok的时候才会进行到这一步,所以如果依然返回error,如果请求的url没问题的话,那么就可以判定服务器繁忙或者服务器宕机。
如果正确返回response,并且状态代码为200 ,那么可以继续写正常的程序逻辑。
如果response的状态代码不为200比如啥404,501等等,那么可以判定为啥?服务器连接失败?好像只能这么写。。。。