gpt4 book ai didi

swift - NSURLSessionDelegate 方法未调用

转载 作者:行者123 更新时间:2023-11-30 10:28:04 25 4
gpt4 key购买 nike

我正在尝试接受自签名 SSL 证书,并希望采取在 URLSession 上使用委托(delegate)方法的方法。不幸的是,委托(delegate)方法从未被调用:

func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
completionHandler(URLSession.AuthChallengeDisposition.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))
}

我以为可能是这个函数,但是

func urlSessionDidFinishEvents(forBackgroundURLSession session: URLSession) {
print ("finish")
}

也没有被调用。

我设置了一个单 View 项目并推送到 Git 以显示问题

https://github.com/stevencurtis/selfsigned.git

但这是该单一 View 中的代码:

import UIKit

ViewController 类:UIViewController、URLSessionDelegate {

override func viewDidLoad() {
super.viewDidLoad()
getRequest()
}

func getRequest() {
let request = URLRequest(url: URL(string: "https://example.com")!)
let session = URLSession(configuration: .default, delegate: self, delegateQueue: .main)
let dataTask = session.dataTask(with: request as URLRequest)
dataTask.resume()
}



func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
completionHandler(URLSession.AuthChallengeDisposition.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))
}

func urlSessionDidFinishEvents(forBackgroundURLSession session: URLSession) {
print ("finish")
}

func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse, completionHandler: (URLSession.ResponseDisposition) -> Void) {
// We've got the response headers from the server.
print("didReceive response")
completionHandler(URLSession.ResponseDisposition.allow)
}

func urlSession(_ session: URLSession, didBecomeInvalidWithError error: Error?) {
// We've got an error
if let err = error {
print("Error: \(err.localizedDescription)")
} else {
print("Error. Giving up")
}
}

}

那么我怎样才能调用这些委托(delegate)方法呢?

最佳答案

您可以使用基于协议(protocol)的基于 block 的 API,但不能同时使用两者。

原因很简单,基于 block 的 API 没有设置所需的委托(delegate)。

如果您需要委托(delegate)方法,请仅使用 protocol based API .

<小时/>

旁注:

如果存在 native Swift 等效项,请勿使用 NSMutable... 类。 URLRequest 是可变的,如 variable。

关于swift - NSURLSessionDelegate 方法未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59717258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com