ios - URLSession 委托(delegate)方法不起作用

标签 ios swift api

我要从 API 读取文件,但它的大小等于 1.6mb,而且需要很长时间。我希望分部分阅读它,当我找到我需要的数据时,我将停止接收数据。我尝试使用一些委托(delegate)方法,但它们不起作用。我不明白哪里出了问题?
我有下一个代码:

class ViewController: UIViewController, URLSessionTaskDelegate, URLSessionDelegate, URLSessionDataDelegate {

    var httpString = "hided"

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

    func getLogBinData() {
        let session = URLSession(configuration: .default, delegate: self, delegateQueue: OperationQueue.main)
        if let url = URL(string: httpString + "log.bin") {
            var request = URLRequest(url: url)
            request.httpMethod = "GET"
            let task = session.dataTask(with: request)
            task.resume()
        }
    }

    func urlSession(_ session: URLSession, task: URLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) {
        print()
    }

    func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
        if dataTask.countOfBytesReceived >= 500 {
            print(dataTask.countOfBytesReceived)
        }
    }

    func urlSession(_ session: URLSession,
                    dataTask: URLSessionDataTask,
                    didReceive response: URLResponse,
                    completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) {
        if dataTask.countOfBytesReceived >= 500 {
            print(dataTask.countOfBytesReceived)
        }
    }


}

最佳答案

根据评论,我编辑了代码并且成功了。

class ViewController: UIViewController, URLSessionTaskDelegate, URLSessionDelegate, URLSessionDataDelegate {

    var httpString = "hided"

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

    func getLogBinData() {
        let session = URLSession(configuration: .default, delegate: self, delegateQueue: OperationQueue.main)
        if let url = URL(string: httpString + "log.bin") {
            var request = URLRequest(url: url)
            request.httpMethod = "GET"
            let task = session.dataTask(with: request)
            task.resume()
        }
    }

    func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
        if dataTask.countOfBytesReceived >= 500 {
            print(dataTask.countOfBytesReceived)
        }
    }
}

关于ios - URLSession 委托(delegate)方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49403166/

相关文章:

ios - 当我尝试存档时找不到 GDataCalendar.h

ios - 使用导航 Controller 在 View 之间循环

angularjs - Angular API 对象

php - Laravel:在 Controller 中使用最少的嵌套路由

ios - 格式指定类型 'int' 但参数的类型为 'NSString *'

ios - 与自定义 MKAnnotationView 不兼容的指针

Swift:如何子类化一个对象以便我可以添加一个额外的变量?

c# - 谷歌分析 API C#

swift - 如何在 Swift 4 中逐行写入文件

ios - SwiftUI:如何使隐藏的 UITabBar 在出现的 View 上正确显示?