私は画像をサーバーにアップロードするのにURLSessionDataDelegate
を持っています。以下はその一部です。Swift:他のURLSessionが初期化されたときにURLSessionを初期化しない方法は?
URLSession
は、アップロードする画像を選択するとすぐに初期化されます。
Upload
ボタンをタップして、no internet connection
がある場合は、画像をRealmに保存し、アプリが起動されたときに次回にアップロードしています。
保存された画像をアップロードするために、私はOfflinePictureUploadClass
というほぼ同じコードの別のクラスを作成しました。
スワイプでアプリを終了してもう一度アプリを終了した場合は、の正しいURLSessionDataDelegate
メソッドが実行されています。したがって、この場合は問題はありません。
しかし、アプリケーションを完全に閉じずに正常に再起動すると、メインPictureUpload
クラスのデリゲートメソッドが実行されていて、アップロードが失敗しています。
これを克服するにはどうすれば画像が選択されたときに初期化されるURLSessionDataDelegate
を初期化解除するのですか。
以下のコードは、画像が選択されたときに初期化されるものを示しています。
fileprivate var DefaultSession: Foundation.URLSession!
fileprivate var BackgroundSession: Foundation.URLSession!
override init() {
super.init()
// default session to fetch
let config = URLSessionConfiguration.default
config.timeoutIntervalForRequest = 20
DefaultSession = Foundation.URLSession(configuration: config, delegate: nil, delegateQueue: .main)
// background session
let backgroundConfiguration = "com.xxx.backgroundconfiguration.upload"
let configuration = URLSessionConfiguration.background(withIdentifier: backgroundConfiguration)
BackgroundSession = Foundation.URLSession(configuration: configuration, delegate: self, delegateQueue: .main)
}
ありがとうございました。私は私の質問でより明確にしようとします。イメージが選択されると、PictureUploadクラスが初期化されます。次の画面では、ユーザーがアップロードをタップしてインターネットがチェックされ、接続がない場合、イメージが保存され、後で接続が確立されるとアップロードされます。問題は、アプリがバックグラウンドで移動され、完全に閉じられていない場合です。インターネットがアクティブで、アプリケーションが再起動されると、PictureUploadのデリゲートメソッドが実行されます。 OfflinePictureUploadクラスを実行することから始まり、Delegateを実行する必要があるとき、PictureUploadクラスに移動します。 – Ananth
ありがとうございました。私はそれをすることができた。背景識別子を変更しました。私はちょうど両方のURLTasksが同じ背景識別子を持っていることに気づいた。だから、識別子を変えることはやりました。 – Ananth