2016-09-10 14 views
0

JSONファイルをWebサーバーからロードしようとしています。リクエストを開始する方法は次のとおりです。なぜ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() 
} 
関連する問題