【问题标题】:Local networking using URLSession - Swift 4.2, Xcode 10.1使用 URLSession 的本地网络 - Swift 4.2、Xcode 10.1
【发布时间】:2018-12-28 00:52:22
【问题描述】:

我正在尝试通过本地网络向 IP 地址发出 HTTP 请求。但是,当我调用 dataTask 时,它实际上并没有发出请求。对互联网的请求工作正常。我也尝试从 HTTPBot 发出请求,它成功了。

这是调用的代码:

    let url = apiBaseUrl + "get_serial"
    let urlObj = URL(string: url)
    var urlRequest = URLRequest(url: urlObj!)

    urlRequest.httpMethod = "GET"
    urlRequest.cachePolicy = URLRequest.CachePolicy.reloadIgnoringCacheData

    URLSession.shared.dataTask(with: urlObj!) { (data, response, error) in
            guard let data = data else { return }

            let serial = (String(data: data, encoding: .utf8))

            onSuccess(serial ?? "")
        }

url正确定义为http://192.168.0.50/get_serial

我试图单步执行它,但在它到达 URLSession.shared.dataTask 之后它什么也不做。我怀疑存在线程问题并尝试添加延迟,并尝试从全局线程调度 dataTask,但均未成功。我还尝试允许在我的 .plist 文件中进行任意加载并将该 IP 添加为异常域:

我不确定我错过了什么。

【问题讨论】:

    标签: ios swift xcode networking local


    【解决方案1】:

    根据Apple documentation

    创建任务后,必须通过调用其resume() 方法来启动它。

    因此,您必须保留 URLSession.shared.dataTask 实例并使用 resume 方法启动它。类似于以下内容。

    let url = apiBaseUrl + "get_serial"
    let urlObj = URL(string: url)
    var urlRequest = URLRequest(url: urlObj!)
    
    urlRequest.httpMethod = "GET"
    urlRequest.cachePolicy = URLRequest.CachePolicy.reloadIgnoringCacheData
    
    let task = URLSession.shared.dataTask(with: urlObj!) { (data, response, error) in
            guard let data = data else { return }
    
            let serial = (String(data: data, encoding: .utf8))
    
            onSuccess(serial ?? "")
        }
    
    task.resume()
    

    【讨论】:

    • 非常感谢!我添加了 .resume() 并且它起作用了。我知道我忘记了一些琐碎的事情。休息时间:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    相关资源
    最近更新 更多