【问题标题】:NSURLSession dataTaskForRequest:completion: unrecognized selector sent to instanceNSURLSession dataTaskForRequest:completion: 无法识别的选择器发送到实例
【发布时间】:2015-10-02 11:08:41
【问题描述】:

当我尝试创建我自己的会话对象 NSURLSession() 并请求一个 url 时,我得到一个无法识别的选择器异常,但是当我使用共享会话 NSURLSession.sharedSession() 时,一切正常。怎么会?

var url = NSURL(string: "http:/www.google.com")
if url != nil {
    //throws unrecognized selector when dataTaskWithURL is called
    let session=NSURLSession()
    session.dataTaskWithURL(url!)

   //works
    let sharedSession=NSURLSession.sharedSession()
    sharedSession.dataTaskWithURL(url!)
}

【问题讨论】:

  • 尝试使用配置进行初始化。 NSURLSession(配置:NSURLSessionConfiguration.defaultSessionConfiguration())

标签: ios swift nsurlsession unrecognized-selector


【解决方案1】:

你必须init URLSession 配置:

URLSession(configuration: .default)

或使用共享会话

URLSession.shared

【讨论】:

  • 谢谢它有效,如果我不向构造函数传递任何内容,我假设它默认使用 defaultSessionConfiguration
  • 对于 Swift 3,现在的语法是:URLSession(configuration: URLSessionConfiguration.default)
【解决方案2】:

在 SWIFT 3.0 及更高版本中:

        URLSession.shared.dataTask(with: url, completionHandler:
        {
            (data, response, error) in

            //Your code
        }).resume()

【讨论】:

    【解决方案3】:

    除了共享会话NSURLSession 必须使用这两种方法之一进行初始化

    init(configuration configuration: NSURLSessionConfiguration)
    
    
    init(configuration configuration: NSURLSessionConfiguration,
                   delegate delegate: NSURLSessionDelegate?,
                 delegateQueue queue: NSOperationQueue?)
    

    【讨论】:

      【解决方案4】:

      在声明时进行初始化:-

      var session = URLSession(configuration: .default)
      

      【讨论】:

        猜你喜欢
        • 2019-08-28
        • 2012-07-24
        相关资源
        最近更新 更多