【发布时间】:2015-11-13 21:57:18
【问题描述】:
我正在尝试使用 NSURLSession 从 url 获取 ID,但 let task = NSURLSession.... 和 task.resume 之间的代码从未执行(我在里面放置了一个断点进行检查,如您在附图中所见)。
我错过了什么?
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()
}
更新:
我变了
let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in
到
让 task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) in
然后它对我有用。
【问题讨论】:
-
呼叫是否在服务器端服务?我将您的代码与我的代码进行了比较,它看起来是正确的。 (如果返回的数据为空,我会添加一些错误检查。)我的猜测是服务器端代码不好,可能没有返回任何内容。
-
顺便说一句,使用
try!处理网络响应确实不是一个好主意。如果出现您无法控制的网络错误,您几乎肯定不希望您的应用崩溃。 -
关于您的更新,这几乎肯定不是真正的问题。还有其他事情发生。如果它在改变之后起作用,那无疑只是一个巧合。问题在于其他地方。
-
我会继续玩它的。之前的问题不是它没有返回任何东西,而是任务中的代码甚至没有被执行。
标签: ios swift nsurlsession nsurlrequest nsurlsessiondatatask