我正在尝试通过本地网络向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 - 使用URLSession的本地网络-Swift 4.2,Xcode 10.1-LMLPHP
我不知道我错过了什么。

最佳答案

根据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()

关于ios - 使用URLSession的本地网络-Swift 4.2,Xcode 10.1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53952506/

10-10 22:25