[英]Why doesn't NSURLSession.dataTaskWithURL() call my completion handler?
我正在嘗試從Web服務器加載JSON
文件。 這是我啟動請求的方式:
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
文件。 但是完成處理程序永遠不會被調用。 它永遠不會在我在完成處理程序中設置的斷點處停止,並且調試器日志中不會顯示任何輸出。
我已經在單獨的函數而不是閉包中使用完成處理程序嘗試過此操作,但是行為是相同的。
誰能告訴我為什么我的完成處理程序不被調用?
您忘記了調用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
您永遠不會開始任務。 嘗試這個:
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()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.