2015-01-07 19 views
6

Tôi gặp sự cố didReceiveData và didCompleteWithError không được gọi. Đây là mã của tôi:Phương thức NSURLSessionDataDelegate didReceiveData và các phương thức khác không được gọi là

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() 


} 

Đây là những đại biểu tôi thực hiện

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?) { 

} 

Ở đây tôi xem với điểm break

didReceiveResponse được gọi nhưng hai khác không nhận được gọi là .

Vui lòng trợ giúp!

+0

Bạn đã có giải pháp chưa? Tôi cũng bị mắc kẹt với cùng một kịch bản – ChezhianNeo

+0

bạn có thể sử dụng trình xử lý hoàn tất cho việc này. –

Trả lời

12

Thực hiện xử lý hoàn thành vào phương pháp đại biểu của bạn

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

Trình xử lý hoàn thành hoạt động tốt mà tôi đã biết nhưng tôi muốn sử dụng phương thức ủy nhiệm. –

+2

Để làm cho các phương thức ủy nhiệm khác hoạt động, bạn nên gọi trình xử lý hoàn thành với NSURLSessionResponseDisposition.Allow – ChezhianNeo

+0

chắc chắn sẽ thử nó :) –

3

tôi sẽ xác nhận bình luận ChezhianNeo về gọi completionHandler các didRecieveResponse đại biểu với NSURLSessionResponseAllow, như hình dưới đây

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

completionHandler(NSURLSessionResponseAllow); 
} 

Điều này cho phép các phương pháp đại biểu didRecieveData được gọi là tốt. Điều gì cũng hoạt động, ít nhất nó đã làm cho tôi, chỉ đơn giản là không thực hiện phương thức didReceiveResponse trong đại biểu của bạn, nhưng thực hiện phương thức didReceiveData - "bỏ qua" phương thức didReceiveResponse cho phép phương thức didReceiveData được gọi, mà doesn ' t dường như làm cho rất nhiều ý nghĩa, nhưng nó hoạt động.

Các vấn đề liên quan