2017-10-07 1 views
0

変換イメージをbase64に使用して複数のイメージをサーバーにアップロードし、APIでイメージをパラメータとして送信しています。しかし、私たちがapiを何度も何度も呼び出すと、apiがボタンをクリックするのを止める方法を知りました。 APIを呼び出すために以下のコードを使用しています。事前URLセッションリクエストをキャンセルする方法

let urlPath: String = "URL" 
     let url: URL = URL(string: urlPath)! 
     var request1 = URLRequest(url: url) 
     request1.httpMethod = "POST" 
     let stringPost="imgSrc=\(image)" 
     let data = stringPost.data(using: String.Encoding.utf8) 
     // print("data\(data)") 
     request1.httpBody=data 

     request1.timeoutInterval = 60 
     let _:OperationQueue = OperationQueue() 
     let task = session.dataTask(with: request1){data, response, err in 
      do 
      { 
       if data != nil 
       { 
        print("data\(String(describing: data))") 
        if let jsonResult = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary 
        { 
         DispatchQueue.main.async 
          { 
         print("json\(jsonResult)") 


        } 
       } 

      } 
      catch let error as NSError 
      { 
       DispatchQueue.main.async 
        { 

       print("error is \(error)") 
       print("error desc \(error.localizedDescription)") 
       } 
      }} 
     task.resume() 
+0

可能性のある重複した[NSURLSessionは、タスクをキャンセルすることができます](https://stackoverflow.com/questions/19975642/nsurlsession-cancel-task) –

+0

重複している可能性がありますhttps://stackoverflow.com/questions/23518690/how-to-find-and-c ancel-a-task-in-nsurlsession –

答えて

4

おかげで、グローバル変数としてオブジェクトtaskを行い、その後、あなたはでどこでもそれを取り消すことができます。

task.cancel() 

また、オブジェクトsessionURLSessionインスタンスをされている場合、次の方法でキャンセルできます:

session.invalidateAndCancel() 
1

以前のダウンロードが進行中である場合にAPIコールを再び許可したくない場合は、次のようにして行うことができます。

タスク(URLSessionDataTaskタイプ)あなたのボタンアクションに続いて

let task = URLSessionDataTask() 

あなたはURLSessionDataTaskクラスで提供し、あなたのあたりなどに応じてアクションを行うされ、実行中のような状態次利用をすることができ、タスクのダウンロード状況を確認することで、以下のように行う

func uploadButtonPressed() { 
    if task.state != .running { 
     // Make your API call here 
    } else { 
     // Dont perform API call 
    } 
} 

ニーズ、

public enum State : Int { 
    case running 
    case suspended 
    case canceling 
    case completed 
} 
1

タスクの結果を確認できます。すべてが大丈夫であれば、あなたは

task.resume()

ではなく、もし

task.cancel()の

関連する問題