Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
314 views
in Technique[技术] by (71.8m points)

ios - File uploading progress issue

I am uploading a single file in a table view cell using AFNetworking.

Uploading is working alright. But when I scroll my cell off view, the progress is gone or some times it displays different progress values like 20% or 50%, and again 30%.

This is my code:

   //Tableview Cell configure
    var cell :  ChattingPhotoCell!
                if message.vendorType == .Receiver {
                    //Receive Image message
                    cell = tableView.dequeueReusableCell(withIdentifier: "ReceiveChattingPhotoCell") as! ChattingPhotoCell
                    if cell == nil {
                        cell = Bundle.main.loadNibNamed("ReceiveChattingPhotoCell", owner: self, options: nil)?[0] as! ChattingPhotoCell
                    }
                    cell.reloadDelegate = self
                    cell.mDelegate = self
                    cell.accessoryType = cell.isSelected ? .checkmark : .none
                    cell.conficureImageCell(msg: message,indexPath: indexPath)
                } else {
                    // Send Image Message
                    cell = tableView.dequeueReusableCell(withIdentifier: "SenderChattingPhotoCell") as! ChattingPhotoCell
                    if cell == nil {
                        cell = Bundle.main.loadNibNamed("SenderChattingPhotoCell", owner: self, options: nil)?[0] as! ChattingPhotoCell
                    }
                    cell.reloadDelegate = self
                    cell.mDelegate = self
                    cell.accessoryType = cell.isSelected ? .checkmark : .none
                    cell.conficureImageCell(msg: message,indexPath: indexPath)
                }
    //MyCell code
    
        func conficureImageCell(msg:Message,indexPath:IndexPath) {
                self.message = msg
                self.indexPath = indexPath
                if self.message.vendorType == .Sender {
                    self.senderCellConfigure()
                } else {
                    self.receiverCellConfigure()
                }
            }

// sender configure methods
        func senderCellConfigure() {     
        // Send Message
        if message.upload ==  1 {
            self.btnRetry.isHidden = true
        }else{
            self.btnRetry.isHidden = false
        }
        
        if message.is_send == 0 && !self.message.isUploadMedia && message.upload != 1 {
            let image = UIImage.init(contentsOfFile: documentDir.path)
            if image != nil {
                self.uploadImageToServer(ArrImage_Video: NSMutableArray.init(array: [image!]), strMsgType: "3")
            }
        }
        
        if self.message.isUploadMedia {
            self.progressView.isHidden = false
            self.btnRetry.isHidden = true
        } else {
            self.progressView.isHidden = true
        }
        

    }


   
     // MARK:- WebserviceCalling // Hiren
        func uploadImageToServer(ArrImage_Video:NSMutableArray,strMsgType: String){
            self.message.isUploadMedia = true
            self.btnRetry.isHidden = true
            if self.str_media_url.isBlank {
                self.progressView.isHidden = false
                let accessToken = Singleton.sharedSingleton.retriveFromUserDefaults(key:Global.kLoggedInUserKey.AccessToken)
                print(accessToken!)
                let param: NSMutableDictionary = NSMutableDictionary()
                param.setValue(fromJID, forKey: "from_user_id")
                param.setValue(toJID, forKey: "to_user_id")
                param.setValue(strMsgType, forKey: "message_type")
                param.setValue("ABC", forKey: "from_user_name")
                param.setValue(UIDevice.current.model, forKey: "device_type")
                param.setValue("897584acac541d73d5f01f294fe944ddb35b6f67ea894e9ac29b03c7da69ca48", forKey: "device_token")
                param.setValue("jpeg", forKey: "file_type")
                param.setValue("135", forKey: "message_id")
                param.setValue(accessToken, forKey: "access_token")
                
                AFAPIMaster.sharedAPIMaster.PostMediatoServer_chat(params: param, arrMedia: ArrImage_Video, showLoader: false, enableInteraction: true, viewObj: self, onSuccess: {
                    (DictResponse) in
                    let dictResponse: NSDictionary = DictResponse as! NSDictionary
                    let dictData: NSDictionary = dictResponse.object(forKey: "SuccessResponse") as! NSDictionary
                    let media_url = dictData.object(forKey: "media_url") as? String ?? ""
                    let media_id = dictData.object(forKey: "id") as? Int ?? 0
                    let thumb_image = dictData.object(forKey: "thumb_image") as? String ?? ""
                    print(media_url)
                    print(thumb_image)
                    DispatchQueue.main.async {
                        self.progressView.isHidden = true
                        let onChatMaster = OnChatMasterTable()
                        let messageObj = onChatMaster.getMessageFromDB(strMessageID: self.msgID, strFromUId: self.fromJID, strToUId: self.toJID)
                        messageObj.media_url = media_url
                        messageObj.thumb_url = thumb_image
                        messageObj.upload = 1
                        messageObj.message = self.imageName
                        messageObj.media_id = media_id
                        self.str_media_ID = String(media_id)
                        self.message.media_id = media_id
                        DBHelper.sharedInstance.queue?.inDatabase() {
                            db in
                            DBHelper.sharedInstance.chilaxDB.open()
                            let strUpdQuery = "UPDATE OnChat_Master SET upload = 1 , media_url = '(media_url)', thumb_url = '(thumb_image)' , media_id = (media_id) where message_id = '(messageObj.message_id)' AND from_user_id = '(messageObj.from_user_id)' AND to_user_id = '(messageObj.to_user_id)'"
                            DBHelper.sharedInstance.chilaxDB.executeUpdate(strUpdQuery, withArgumentsIn: [])
                            DBHelper.sharedInstance.chilaxDB.close()
                        }
                        //onChatMaster.updateMessageInDB(messsageObj: messageObj)
                        self.sendMediaDataToSender(media_url: media_url, thumb_image: thumb_image,strMediaId:self.str_media_ID)
                        self.message.isUploadMedia = false
                    }
                }, displayProgress: {
                    (progress) in
                    DispatchQueue.main.async {
                        let progressTask : Float = Float((progress as! Progress).fractionCompleted)
                        print(progressTask)
                        self.progressView.setProgress(progressTask, animated: true)
                    }
                }, onFailure: {
                    self.progressView.setProgress(0.0, animated: true)
                    self.progressView.isHidden = true
                    self.btnRetry.isHidden = false
                    self.message.isUploadMedia = false
                })
            
        } else {
            self.sendMediaDataToSender(media_url: str_media_url, thumb_image: str_thumb_url, strMediaId: str_media_ID)
        }
    }

I reuse cell using table view deque methods. Any wrong in this code.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...