【问题标题】:Check whether internet connection is available [duplicate]检查互联网连接是否可用[重复]
【发布时间】:2015-09-28 07:44:44
【问题描述】:

我正在编写一个函数来检查用户设备是否连接到互联网。如果不是,它会通过警告框警告用户。

最初我使用以下完美运行的方法:

var data = try NSURLConnection.sendSynchronousRequest(request, returningResponse: &response) as NSData?

但这在 iOS 9 中已被弃用。

所以我将代码更改为以下内容。

import Foundation
import SystemConfiguration

public class Reachability {

class func isConnectedToNetwork()->Bool{

    var Status:Bool = false
    let url = NSURL(string: "https://google.com/")
    var response: NSURLResponse?
    let request = NSMutableURLRequest(URL: url!)
    request.HTTPMethod = "HEAD"
    request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData
    request.timeoutInterval = 10.0

    let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration()
    let session = NSURLSession(configuration: sessionConfig, delegate: nil, delegateQueue: nil)

    let task = session.dataTaskWithRequest(request, completionHandler: {data, response, err -> Void in

        if let httpResponse = response as? NSHTTPURLResponse {
            if httpResponse.statusCode == 200 {
                Status = true
            }
        } 
    })

    task.resume()
    return Status
}}

问题是它总是说没有互联网连接,这显然是错误的。这意味着“布尔”总是错误的。我做错了什么?

提前致谢。

【问题讨论】:

标签: ios swift swift2 ios9 sendasynchronousrequest


【解决方案1】:

使用可达性或其他一些测试是您应该如何满足您的实际要求。

但是,为了回答您的问题,它总是返回 false 的原因是数据任务是异步的 - 也就是说,它将独立于函数调用完成,因此当它完成并尝试将状态设置为true,函数已经返回false

【讨论】:

    【解决方案2】:

    推荐的方式是发送你真正要发送的请求,判断是成功还是失败,如果失败了,判断失败的原因。没有办法可靠地检测是否存在连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 2017-06-07
      • 2019-10-27
      • 2017-11-30
      • 2012-03-23
      相关资源
      最近更新 更多