2015-01-07 31 views
6

didReceiveDataとdidCompleteWithErrorが呼び出されないという問題があります。ここに私のコードは次のとおりです。NSURLSessionDataDelegateメソッドdidReceiveDataなどが呼び出されていません

class LoginViewController: UIViewController, NSURLSessionDataDelegate, NSURLSessionDelegate, NSURLSessionTaskDelegate { 
. 
. 
. 
} 

@IBAction func loginAction(sender: AnyObject) { 

    var sessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration() 

    var session = NSURLSession(configuration: sessionConfiguration, delegate: self, delegateQueue:nil) 

    let postParams = "email="+"[email protected]&password="+"abcd" 

    let url = NSURL(string:"http://myurl.com/api/v1/user/login") 
    let request = NSMutableURLRequest(URL: url!) 

    request.HTTPMethod = "POST" 

    request.HTTPBody = postParams.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) 

    let task = session.dataTaskWithRequest(request) 


    task.resume() 


} 

これらは私が

func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveResponse response: NSURLResponse, completionHandler: (NSURLSessionResponseDisposition) -> Void) { 

} 

func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) { 

} 

func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) { 

} 

を実装代理人であるここで私は

didReceiveResponseが呼ばれたが、他の二つが呼び出さ取得されていないブレークポイントを見て。

助けてください!

+0

解決策はありますか?また、同じシナリオで悩んでいる – ChezhianNeo

+0

これのための完了ハンドラを使用することができます。 –

答えて

12

これはdidRecieveDataデリゲートメソッドを有効に

- (void) URLSession:(NSURLSession *)session dataTask: (NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler { 

completionHandler(NSURLSessionResponseAllow); 
} 

以下のように私は、NSURLSessionResponseAllowでdidRecieveResponseデリゲートのcompletionHandlerを呼び出すことについてChezhianNeoのコメントを確認しますあなたのデリゲートメソッドで

func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveResponse response: NSURLResponse, completionHandler: (NSURLSessionResponseDisposition) -> Void) { 
completionHandler(NSURLSessionResponseDisposition.Allow) //.Cancel,If you want to stop the download 
} 
+0

Completionハンドラは私がすでに知っているもののうまく機能しますが、デリゲートメソッドを使いたいと思っていました。 –

+2

他のデリゲートメソッドを動作させるには、NSURLSessionResponseDisposition.Allowを使用して補完ハンドラを呼び出す必要があります。 – ChezhianNeo

+0

これは間違いなく試してみます:) –

3

を完了ハンドラを実装呼び出されることもあります。

少なくとも私にとっては、デリゲートでdidReceiveResponseメソッドを実装しないで、didReceiveDataメソッドを実装するだけです - didReceiveResponseメソッドをスキップすると、didReceiveDataメソッドが呼び出されますが、全体的には意味があるように見えますが、うまくいきます。

関連する問題