首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSURLSession验证

NSURLSession验证
EN

Stack Overflow用户
提问于 2016-01-07 15:50:24
回答 1查看 369关注 0票数 0

我正在尝试用Swift 2处理数据请求的正确方法(或者至少是一个好方法)。

我想要做到的是:

  1. 检查数据连接是否可用,如果没有,则通知用户
  2. 如果连接可用,则发出请求
  3. 检查请求响应,如果无效,则通知用户
  4. 如果有效,请检查响应代码并显示2条消息中的一条

到目前为止我拥有的

代码语言:javascript
复制
    let requestURL: String = **********************
    let url = NSURL(string: requestURL)!
    let request = NSMutableURLRequest(URL: url)
    let session = NSURLSession.sharedSession()

    let postParams: NSDictionary = ["id":newId!]

    request.HTTPMethod = "POST"

    do {
        let jsonData = try NSJSONSerialization.dataWithJSONObject(postParams, options: [])
        let jsonString = NSString(data: jsonData, encoding: NSUTF8StringEncoding)! as String
        let utf8str = jsonString.dataUsingEncoding(NSUTF8StringEncoding)
        let base64Encoded = utf8str?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
        let bodyData = "data="+base64Encoded!

        request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding)
    } catch {
        print("Error serialising JSON")
    }

    session.dataTaskWithRequest(request) { data, response, error in

        // Make sure response is OK
        guard let realResponse = response as? NSHTTPURLResponse where realResponse.statusCode == 200 else
        {
            // Show success message
            print("Invalid Response from server")
        }

        // Read JSON Data
        if let postString = NSString(data:data!, encoding: NSUTF8StringEncoding) as? String {
            if let responseData = postString.dataUsingEncoding(NSUTF8StringEncoding) {
                let json = JSON(data: responseData)
                let responseMessage:String = json["response"]["data"].stringValue
                if(responseMessage == "success")
                {
                   print("successful post")
                }else{
                   print("error saving post")
                }

            }
        }
    }

目前,如果我要在飞机模式下运行这个程序,那么什么都不会发生,但是我想要捕捉到它,并告诉它们它们需要一个数据连接。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-07 15:54:48

尝试像这样的事情:

代码语言:javascript
复制
func connectedToNetwork() -> Bool {
            var zeroAddress = sockaddr_in()
            zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
            zeroAddress.sin_family = sa_family_t(AF_INET)
            let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
                SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
            }
            var flags = SCNetworkReachabilityFlags()
            if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) {
                return false
            }
            let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0
            let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
            return (isReachable && !needsConnection)
            }
代码语言:javascript
复制
if(connectedToNetwork() == true){
//call your function to make the request
} else {
//show alert that they need an internet connection
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34659447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档