簡體   English   中英

為什么NSURLSession.dataTaskWithURL()不調用我的完成處理程序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM