2016-09-10 2 views
0

Я пытаюсь загрузить файл JSON с веб-сервера. Вот как я начинаю запрос:Почему NSURLSession.dataTaskWithURL() вызывает мой обработчик завершения?

let url:NSURL? = NSURL(string: lookupUrlFragment + query) 

// Check if an actual url object was created 
if let actualUrl = url { 

    // Create a default NSURLSessionConfiguration 
    let sessionConfig:NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration() 

    // Create a default session 
    let session:NSURLSession = NSURLSession(configuration: sessionConfig) 

    session.dataTaskWithURL(actualUrl, completionHandler: { 
     (data:NSData?, response:NSURLResponse?, error:NSError?) in 
     NSLog("Got data = \(data)") 
     NSLog("Got response = \(response)") 
     NSLog("Got error = \(error)") 
     self.searchResults = data 
     self.delegate?.searchResultsAreReady() 
    }) 
} 

Я прошел через этот код с помощью отладчика. Когда он переходит к вызову dataTaskWithURL(), значение фактического URL-адреса верное. Если я ударил его из веб-браузера, я получаю файл JSON. Но обработчик завершения не вызван. Он никогда не останавливается в точке прерывания, которую я установил в обработчике завершения, и в журнале отладчика не появляется вывод.

Я пробовал это с обработчиком завершения в отдельной функции вместо закрытия, но поведение такое же.

Может ли кто-нибудь сказать мне, почему мой обработчик завершения не вызван?

ответ

5

Вы забыли позвонить по номеру resume().

let session:NSURLSession = NSURLSession(configuration: sessionConfig) 

let task = session.dataTaskWithURL(actualUrl, completionHandler: { 
    (data:NSData?, response:NSURLResponse?, error:NSError?) in 
    NSLog("Got data = \(data)") 
    NSLog("Got response = \(response)") 
    NSLog("Got error = \(error)") 
    self.searchResults = data 
    self.delegate?.searchResultsAreReady() 
}) 
task.resume() // you miss this 
+1

Спасибо !!!!!! – Thom

0

Вы никогда не ставите задачу. Попробуйте следующее:

let url:NSURL? = NSURL(string: lookupUrlFragment + query) 

// Check if an actual url object was created 
if let actualUrl = url { 

    // Create a default NSURLSessionConfiguration 
    let sessionConfig:NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration() 

    // Create a default session 
    let session:NSURLSession = NSURLSession(configuration: sessionConfig) 

    let task = session.dataTaskWithURL(actualUrl, completionHandler: { 
     (data:NSData?, response:NSURLResponse?, error:NSError?) in 
     NSLog("Got data = \(data)") 
     NSLog("Got response = \(response)") 
     NSLog("Got error = \(error)") 
     self.searchResults = data 
     self.delegate?.searchResultsAreReady() 
    }) 

    task.resume() 
} 
Смежные вопросы