[問題]Swift如何停止正在執行的NSURLSession?

看板MacDev作者 (Jim)時間8年前 (2016/02/17 08:53), 8年前編輯推噓1(102)
留言3則, 3人參與, 最新討論串1/1
我有一段程式碼如下: 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://www.ptt.cc/bbs/MacDev/M.1455670401.A.B7E.html

02/17 10:20, , 1F
task 可以cancel. 不過應該可以平行執行
02/17 10:20, 1F
我宣告一個全域的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

02/17 20:39, , 2F
swift在optional變數下一定要用unwrap的方法來確認不是nil
02/17 20:39, 2F
zonble大,我照你的方式做了,雖然task的確是被取消,中斷那次的data也的確回傳nil, 沒想到呼叫下一次的執行時間依舊還是得要等前面跑完,實在不解... ※ 編輯: lsyjim (61.59.16.168), 02/23/2016 16:54:22
文章代碼(AID): #1MmyI1j- (MacDev)