我正在使用 NSURLSession 来调用一个 post API,但是当我关闭 wifi 然后点击网络服务并再次打开 wifi NSURLSession 正在调用之前调用的网络服务时,我想停止这个过程。我在一些文档上读到,NSURLSession 在任何情况下连接中断时都会存储每个服务调用的部分,并在再次建立连接时再次点击该服务。所以现在我没有得到任何解决方案来在连接重新连接到我的设备后停止该服务调用。 任何人都请帮助我。提前致谢。
下面是我使用的代码。
let token: NSString!
let urlPath: NSURL!
if provider .isEqualToString("No"){
urlPath = NSURL(string: kAPI_SERVERBASEURL + (url as String))
}
else{
urlPath = NSURL(string: kAPI_SERVERBASEURLSEARCHPROVIDER + (url as String))
}
var postJsonData = NSData()
var jsonString = NSString()
do {
postJsonData = try NSJSONSerialization.dataWithJSONObject(dictRequest, options:[])
jsonString = NSString(data: postJsonData, encoding: NSUTF8StringEncoding)!
NSLog("request - %@", jsonString);
// do other stuff on success
} catch {
print("JSON serialization failed: \(error)")
}
let request = NSMutableURLRequest(URL: urlPath);
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData
request.HTTPShouldHandleCookies = false
request.timeoutInterval = 120 ;
request.HTTPMethod = "POST";
if NSUserDefaults.standardUserDefaults().valueForKey(kAccessToken) != nil{
token = NSUserDefaults.standardUserDefaults().valueForKey(kAccessToken) as! NSString
//token = "tk_1vNoEoZRxJwY"
request.setValue("\(token)", forHTTPHeaderField: "access_token")
}
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.HTTPBody = postJsonData
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request) { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in
`
最佳答案
它可能对你有帮助。
1.像NSURLSessionTask一样声明一个变量
var task: NSURLSessionTask? = nil
2.当你需要调用 dataTaskWithRequest 将对象分配给声明的对象时
task = NSURLSession.sharedSession().dataTaskWithURL(NSURL(fileURLWithPath: ""))
3.当您想取消请求时,只需执行以下操作即可。
if nil != task {
task!.cancel()
task = nil
}
假设您想在调用另一个请求之前取消请求,结合 2 步和 3 步,例如
if nil != task {
task!.cancel()
task = nil
}
task = NSURLSession.sharedSession().dataTaskWithURL(NSURL(fileURLWithPath: ""))
关于ios - 如何从 NSURLSession 中停止任务或部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39654104/