我有一个问题,没有调用didReceiveData和didCompleteWithError.这是我的代码:
class LoginViewController: UIViewController, NSURLSessionDataDelegate, NSURLSessionDelegate, NSURLSessionTaskDelegate {
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
@IBAction func loginAction(sender: AnyObject) {
var sessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
var session = NSURLSession(configuration: sessionConfiguration, delegate: self, delegateQueue:nil)
let postParams = "email="+"rabcd@gmail.com&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()
}
Run Code Online (Sandbox Code Playgroud)
这些是我实施的代表
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?) {
}
Run Code Online (Sandbox Code Playgroud)
在这里,我看到了突破点
didReceiveResponse 被叫,但其他两个没有被调用.
请帮忙 !
Che*_*Neo 14
在委托方法中实现完成处理程序
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveResponse response: NSURLResponse, completionHandler: (NSURLSessionResponseDisposition) -> Void) {
completionHandler(NSURLSessionResponseDisposition.Allow) //.Cancel,If you want to stop the download
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我将确认ChezhianNeo关于使用NSURLSessionResponseAllow调用didRecieveResponse委托的completionHandler的评论,如下所示
- (void) URLSession:(NSURLSession *)session dataTask: (NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
completionHandler(NSURLSessionResponseAllow);
}
Run Code Online (Sandbox Code Playgroud)
这也使得 didRecieveData 委托方法能够被调用。
至少它对我来说也有效,就是简单地不在委托中实现 didReceiveResponse 方法,而是实现 didReceiveData 方法 - “跳过” didReceiveResponse 方法允许调用 didReceiveData 方法,这似乎并不使很有道理,但确实有效。
| 归档时间: |
|
| 查看次数: |
6741 次 |
| 最近记录: |