Swift の URLSesssion
を使った POST 送信の処理を実装した際に発生した警告についての対処法です。
これのせいでアプリがクラッシュするということはないのですが、私の環境では dismiss()
が正常に作動せず、前のページに戻れないというバグが発生したので、修正することをお勧めします。
今回参考にさせていただいた記事はこちら。
【Swift】URLSessionまとめ – Qiita
https://qiita.com/shiz/items/09523baf7d1cd37f6dee#1アプリ1URLSession
こちらの記事内で、下記のような記述があります。
・同時平行処理される複数のURLSessionTaskは1つのURLSessionで共有可能。
・独自でURLSessionを作成している場合は、finishTasksAndInvalidateやinvalidateAndCancelでデリゲートやコールバックオブジェクトへの参照をクリアしないとメモリーリークを起こす。
で、自分のプロジェクトを確認したところ…セッションを無効にする処理を追加してない!
ということで、下記のコードを追加して修正しました。
// ページが破棄される直前に呼び出される override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) // 通信キャンセル&セッション無効 self.session?.invalidateAndCancel() }
私の場合は、ページが破棄される直前に Session
も無効にしていますが、他のタイミングで実行しても問題ありません。
適宜、環境に合わせて変更してください。
また、URLSession
は下記のようにグローバル変数で宣言することをお忘れなく。
var session: URLSession?
URLSession
を使った POST 送信処理については、以前に記事を投稿しましたので、そちらを参考にして頂けると嬉しいです。
【Swift】URLSessionを使ってPOST送信を行う方法
https://cpoint-lab.co.jp/article/201911/12524/
以上、Swift の URLSession
を使用した際に、「A background URLSession with identifier [identifier名] already exists!」という警告が発生する際の対処方法についてでした。
ご参考になれば幸いです。