2015-11-13 3 views
0

Я пытаюсь использовать NSURLSession, чтобы получить идентификаторы от URL-адреса, но код между let task = NSURLSession.... и task.resume никогда не выполняется (я поставил контрольную точку внутри, чтобы проверить, как вы можете видеть на прилагаемом изображении).Задача NSURLSession не работает

Что мне не хватает?

func getPlayingSongData() { 
    while loopItem < IDsForSongsToPlay.count { 
     self.getPlayingSongDataLoop() 
     loopItem++ 
    } 

    self.stream() 
} 

func getPlayingSongDataLoop() { 
    playerStatus = "Paused" 

    let songIDToGet = IDsForSongsToPlay[loopItem] 

    let url:NSURL = NSURL(string: "http://url.com/ajax.php?call=song&id=\(songIDToGet)")! 
    print(url) 

    let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in 

     // Convert Json data into an Array 
     let songID:[String:String] = (try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)) as! [String:String] 

     print(songID["id"]!) 
     self.StreamIDsForSongs.append((songID["id"]!)) 
     songPlaying = songID["title"]! 
    } 
    task.resume() 
} 

UPDATE:

Я изменил

let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in

в

let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) in

, а затем он работал на меня.

My code with breakpoints

+0

Выполняется ли вызов на стороне сервера? Я сравнил ваш код с моим, и он выглядит правильно. (Я бы добавил некоторые проверки ошибок в случае, если возвращаемые данные пустые.) Я предполагаю, что код на стороне сервера плохой, возможно, ничего не возвращает. –

+0

Кстати, это не очень хорошая идея использовать 'try!' Для обработки сетевого ответа. Вы почти наверняка не хотите, чтобы ваше приложение разбилось, если есть некоторая сетевая ошибка вне вашего контроля. – Rob

+0

Что касается вашего обновления, это почти наверняка не настоящая проблема. Там что-то происходит. Если бы это сработало после этого изменения, это, несомненно, просто совпадение. Проблема лежит в другом месте. – Rob

ответ

0

Согласно Apple, функция dataTaskWithURL(_:completionHandler:):

Creates a task that retrieves the contents of the specified URL, then calls a handler upon completion.

Если запрос завершается успешно, параметр блока обработчика завершения data содержит данные о ресурсах, а параметр error является nil. Если запрос терпит неудачу, параметр данных равен nil, а параметр error содержит информацию об ошибке.

Затем вы должны увидеть значения для каждого параметра, касающиеся вашего запроса.

Я надеюсь, что это поможет вам.