作者lsyjim (Jim)
看板MacDev
标题[问题]Swift如何停止正在执行的NSURLSession?
时间Wed Feb 17 08:53:19 2016
我有一段程式码如下:
class func getURL(urlString:String, httpMethod:String, completion:(NSDictionary) -> Void) {
let request : NSMutableURLRequest = NSMutableURLRequest()
request.URL = NSURL(string: urlString)
request.HTTPMethod = httpMethod
let session = NSURLSession.sharedSession()
session.dataTaskWithRequest(request,completionHandler: {(data:NSData?, response: NSURLResponse?, error:NSError?) -> Void in
do{
if let _ = NSString(data:data!, encoding: NSUTF8StringEncoding) {
let jsonDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
Log.msg("load completed \(urlString)")
completion(jsonDictionary)
}
} catch {
Log.msg("bad things happened")
completion(NSDictionary())
}
}).resume()
}
NSURLSession 似乎都是同一条执行绪在执行,因为当我多次呼叫此方法时,都会要等前面
的Request做完,下一次Request才会执行。
我想问的是,是否可在前一次的Request未完成时,只要再次呼叫就立刻中断前一次的作业呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.59.16.168
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MacDev/M.1455670401.A.B7E.html
1F:推 appleway: task 可以cancel. 不过应该可以平行执行 02/17 10:20
我宣告一个全域的task变数给他,但执行task.cancel()就会报错:
fatal error: unexpectedly found nil while unwrapping an Optional value
已经确定task不是nil了...
※ 编辑: lsyjim (61.59.16.168), 02/17/2016 12:07:40
2F:→ darktt: swift在optional变数下一定要用unwrap的方法来确认不是nil 02/17 20:39
zonble大,我照你的方式做了,虽然task的确是被取消,中断那次的data也的确回传nil,
没想到呼叫下一次的执行时间依旧还是得要等前面跑完,实在不解...
※ 编辑: lsyjim (61.59.16.168), 02/23/2016 16:54:22