Как обновить метку определенной ячейки с помощью MZDownloadManager, даже если пользователь перешел на любой ViewController и вернулся - PullRequest
0 голосов
/ 01 марта 2019

Я использую библиотеку MZDownloadManger для загрузки файлов с использованием URL-адреса, все работает нормально, кроме обновления метки, когда я начинаю загрузку, она меняется на «Начало загрузки», затем начинает прогресс, например, 10% 20% и т. Д.работает нормально, но когда я перехожу к любому другому контроллеру представления, его прогресс останавливается и не обновляет значение метки до «Downloaded».я установил флаг в моей локальной базе данных '0' и '1', 0 означает, что не загружен, и 1 означает, что загружен.

вот код, когда пользователь выбирает ячейку и нажимает для загрузки:

func keepOfflineFiles(sender: UIButton) {
    if files[sender.tag].onLocal == "1"{
        self.displayAlert(title: AlertTitle.alert, message: AlertMsg.alreadyDownloaded)
    } else{
        if self.files[sender.tag].status == "on amazon"{
            let indexPath = IndexPath.init(row: sender.tag, section: 0)
            let cell = self.tblFilesPro.cellForRow(at: indexPath)
            if let cell = cell {
                let downloadCell = cell as! filesTableViewCell
                downloadCell.lblDetailsPro.text = "Starting Download. . ."
            }

            let pathString:String = ""
            let fileName:String = self.files[sender.tag].file_id! + self.files[sender.tag].Extension!

            if(fileName != ""){
                let local_url = NSURL(fileURLWithPath: pathString.getDocumentsPath())
                let filePath = local_url.appendingPathComponent(fileName)?.path
                let fileManager = FileManager.default
                if fileManager.fileExists(atPath: filePath!) {
                    // FILE AVAILABLE
                    let indexPath = IndexPath.init(row: sender.tag, section: 0)
                    let cell = self.tblFilesPro.cellForRow(at: indexPath)
                    if let cell = cell {
                        let downloadCell = cell as! filesTableViewCell
                        downloadCell.lblDetailsPro.text = "Downloaded"
                    }
                    self.fileid = self.files[sender.tag].file_id!
                    self.updateFileStatusToRealm()
                    //self.displayAlert(title: AlertTitle.alert, message: AlertMsg.alreadyDownloaded)
                } else {
                    // FILE NOT AVAILABLE
                    let completeUrl:String = Tray.downloadURLBasePath + self.files[sender.tag].fileLink!
                    if(self.verifyUrl(urlString: completeUrl)) {
                        self.fileid = self.files[sender.tag].file_id!
                        let index:String = String(sender.tag)
                        self.AppDelegateObj.downloadManager.addDownloadTask(fileName as String, fileURL: completeUrl as String, destinationPath: index as String)
                    } 
                }
            }
        }else{
            self.displayAlert(title: AlertTitle.alert, message: AlertMsg.inArchiveProcess)
        }

    }
}

вот делегаты MZDownloadManager, которые я вызвал в AppDelegate Чтобы обновить прогресс

func downloadRequestDidUpdateProgress(_ downloadModel: MZDownloadModel, index: Int) {
    let root : UINavigationController = self.window?.rootViewController as! UINavigationController
    if let master = root.topViewController as? TabBarController {
        if let nav = master.viewControllers?[0] as? FilesVC {
            nav.refreshCellForIndex(downloadModel, index: Int(downloadModel.destinationPath)!)
        }
    } else {
        print("Somthing went wrong while downloading this file.")
    }
}

После завершения загрузки

func downloadRequestFinished(_ downloadModel: MZDownloadModel, index: Int) {

    let root : UINavigationController = self.window!.rootViewController! as! UINavigationController
    if let master = root.topViewController as? TabBarController {
        if let nav = master.viewControllers![0] as? FilesVC{
            nav.getDownloadingStatusOfCellForIndex(downloadModel, index: Int(downloadModel.destinationPath)!)
        }
    } else {
        print("Somthing went wrong while finishing downloading of this file.")
    }
}

Метод обновления метки ячейки

 func refreshCellForIndex(_ downloadModel: MZDownloadModel, index: Int) {
    let indexPath = IndexPath.init(row: index, section: 0)
    let cell = self.tblFilesPro.cellForRow(at: indexPath)
    if let cell = cell {
        let downloadCell = cell as? filesTableViewCell
        downloadCell?.updateCellForRowAtIndexPath(indexPath, downloadModel: downloadModel)
    }
}

Метод получения ячейки и изменения значения

func getDownloadingStatusOfCellForIndex(_ downloadModel: MZDownloadModel, index: Int) {
    let indexPath = IndexPath.init(row: index, section: 0)
    let cell = self.tblFilesPro.cellForRow(at: indexPath)
    if let cell = cell {
        let downloadCell = cell as? filesTableViewCell
        downloadCell?.lblDetailsPro.text = "Downloaded"
        self.fileid = self.files[index].file_id!
        self.updateFileStatusToRealm()
    }
}

вот метод, который изменяет значение флага от 0 до 1 в базе данных:

func updateFileStatusToRealm(){
    let fileToUpdate = uiRealm.objects(filesDataTable.self).filter("file_id = %@", self.fileid)
    let realm = try! Realm()
    if let file = fileToUpdate.first {
        try! realm.write {
            file.onLocal = "1"
            tblFilesPro.reloadData()
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...