나는 그림을 서버에 업로드하기 위해 URLSessionDataDelegate
을 가지고 있으며, 다음은 그것의 일부이다.Swift : 다른 URLSession이 초기화 될 때 URLSession을 초기화하지 않는 방법은 무엇입니까?
URLSession
은 업로드 할 이미지를 선택하면 바로 초기화됩니다.
그러나 사용자가 Upload
버튼을 탭하고 no internet connection
이 있으면 이미지를 영역에 저장하고 다음에 앱을 실행할 때 업로드합니다.
저장된 이미지를 업로드 할 때 나는 거의 동일한 코드의 OfflinePictureUploadClass
이라는 다른 클래스를 만들었습니다.
앱을 스 와이프하여 종료 한 다음 다시 시작한 경우 올바른 URLSessionDataDelegate
메서드가 OfflinePictureUploadClass
으로 실행되고 있습니다. 따라서이 경우 아무런 문제가 없습니다.
그러나 응용 프로그램이 완전히 닫히지 않고 정상적으로 다시 실행되면 기본 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
고마워. 나는 그것을 할 수 있었다. 배경 식별자를 변경했습니다. 나는 두 URLTask가 동일한 배경 식별자를 가지고 있다는 것을 알아 차렸다. 그래서 식별자를 바꾸는 것이 트릭을 만들었습니다. – Ananth