iOS: почему мой активный viewcontroller (self) берет адрес одиночного (sharedInstance) при загрузке видео с помощью downloadTask? - PullRequest
0 голосов
/ 02 января 2019

Когда я запускаю приложение, я хотел бы получить приложение active , которое работает нормально - это взаимодействие пользователя. Во-вторых, мне бы хотелось, чтобы в background приложение проверяло, есть ли процесс, связанный со старыми видео, ранее добавленными пользователем и не обработанными. Для этого я использую текущий активный контроллер ( self ) и синглтон ( sharedInstance ).
Моя проблема в том, что адрес себя, активный вид, берет адрес одиночного, когда я пытаюсь загрузить видео в «активном режиме», я не понимаю, почему ...
Например, когда я пользуюсь приложением в обычном режиме, адресом является Печать описания себя: 0x155d5b3a0

Когда я нахожусь в функции urlSession (URLSession, didFinishDownloadingTo location :), мой адрес совпадает с адресом одиночного 0x155e3e890

Основной класс:

@objcMembers class ViewControllerCamBox: UIViewController,URLSessionDelegate,URLSessionDownloadDelegate,FormViewViewControllerDelegate {
        static let sharedInstance = ViewControllerCamBox()
    ...

    }

    func stopVideo
    {
        ...
        self.url = fileUrls![0]
        self.downloadVideo(urlStr: self.url)
        ...
    }

func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, did

WriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {

                if totalBytesExpectedToWrite > 0 {

                    if let onProgress = onProgress {
                        calculateProgress(session: session, completionHandler: onProgress)
                    }
                    let progress = Float(totalBytesWritten) / Float(totalBytesExpectedToWrite)
                    DispatchQueue.main.async {
                        if (self.progressLabel != nil && self.progressBar != nil)
                        {
                        self.progressBar.isHidden = false
                        self.progressBar.progress = Double(progress)
                        self.progressLabel.text = "Téléchargement en cours..."
                        self.progressLabel.isHidden = false
                    }
                }
                debugPrint("Progress \(downloadTask) \(progress)")
            }
        }

        func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
            debugPrint("Download finished: \(location)")

        let nameVideo = self.code_prospect_unique + "_video.MOV"
//MY PROBLEM => self has the sharedInstance address and not the self address of the current active viewcontroller.

        ...
        }

func downloadVideo(urlStr:String)
{
    //self.id = get id from query
    let url = URL(string: urlStr)!
    self.dataTask = self.activate().downloadTask(with: url)
    self.dataTask?.resume()
}

Функция для запуска, чтобы проверить, есть ли видео для отправки:

func checkGeneral()
    {
        //check download = 0e
        let query = "SELECT ID, MAIL, URL, CODE_PROSPECT_UNIQUE FROM VIDEO WHERE DOWNLOAD = 0"
        LocalDatabase.sharedInstance.methodToSelectData(query, completion: { (result) in
            if (result.count > 0)
            {
                let viewControllerCamBox = ViewControllerCamBox.sharedInstance
                if let resultFound = result[0] as? [String: Any] {
                    guard !resultFound.keys.contains("ErrorMessage")
                        else {return}
                    let id = resultFound["ID"] as! NSNumber
                    let url = resultFound["URL"] as! String
                    let code_prospect_unique = resultFound["CODE_PROSPECT_UNIQUE"] as! String
                    viewControllerCamBox.id = id.stringValue
                    viewControllerCamBox.code_prospect_unique = code_prospect_unique
                    viewControllerCamBox.downloadVideo(urlStr: url)
                    print("Data selected successfully: code prospect unique:\(String(describing: viewControllerCamBox.code_prospect_unique))")
                }

                //each rows send
                //check resized = 0

                //check upload = 0

            }
            else
            {
                print("Fail while data selection:  code prospect unique:\(self.code_prospect_unique)")
            }
        })

    }

Есть что-то плохое? Я просто хотел бы использовать синглтон в фоновом режиме и активный вид для обычного использования для пользователя.

Заранее спасибо.

...