51

When trying to create my own session object NSURLSession() and request an url I get an unrecognized selector exception but when I use the shared session NSURLSession.sharedSession() everything works fine. How come?

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!)
}
Alexey
  • 7,127
  • 9
  • 57
  • 94
  • 1
    Try initializing with configuration. NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration()) – MadNik Oct 02 '15 at 11:13

4 Answers4

113

You have to init URLSession with a configuration:

URLSession(configuration: .default)

or use shared session

URLSession.shared
Arsen
  • 10,815
  • 2
  • 34
  • 46
  • 5
    Thanks It works, I assumed that it have used defaultSessionConfiguration by default if I don't pass anything to the constructor – Alexey Oct 02 '15 at 11:16
  • 1
    For Swift 3 the syntax is now: URLSession(configuration: URLSessionConfiguration.default) – David Hunt Sep 01 '16 at 00:31
5

In SWIFT 3.0 and up:

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

            //Your code
        }).resume()
pierre23
  • 3,846
  • 1
  • 28
  • 28
2

Aside from the shared session NSURLSession must be initialized with one of these two methods

init(configuration configuration: NSURLSessionConfiguration)


init(configuration configuration: NSURLSessionConfiguration,
               delegate delegate: NSURLSessionDelegate?,
             delegateQueue queue: NSOperationQueue?)
vadian
  • 274,689
  • 30
  • 353
  • 361
1

Do the initialization while declaration :-

var session = URLSession(configuration: .default)
Jay Mehta
  • 1,511
  • 15
  • 20