弹出视图控制器后保持视图控制器代码运行

问题描述 投票:0回答:0

我正在 XMPP 的帮助下实现聊天功能,并且聊天工作正常。现在我正在处理图像上传,为此我将图像上传到 s3 存储桶,在将图像上传到 s3 之后,我使用 xmpp 方法将 s3 图像 url 作为消息发送给其他用户。这也工作正常但问题是它只有在我停留在同一屏幕上时才有效,即上传图像时的聊天屏幕。因此,如果我的图像仍在上传并且我从视图控制器中弹出,它会被释放,并且在将图像上传到 s3 后我的完成处理程序不会被调用,因此我的 sendMessage 方法也不会被调用。那么我怎样才能做到这一点。即使在上传图像时我在不同的屏幕上,我如何发送消息并调用完成处理程序。

这是我选择图片和上传图片的代码

@IBAction func didPressMedia(_ sender: Any) {
        ImagePickerManager().pickImage(self) { \[weak self\] pickedImage in
        guard let self = self else { return }

        let compressedImage = pickedImage.resizedImage(newSize: CGSize(width: 120, height: 120))
        
        let messageId = XMPPHelper.shared.xmppStream.generateUUID

        let chat = ChatListModel()
        chat.roomId = ""
        chat.message = ""
        chat.messageId = messageId
        chat.time = String(Date().currentTimeMillis())
        chat.to = self.viewModel.otherUser
        chat.from = self.viewModel.myJid ?? ""
        chat.type = "chat/image"
        chat.imageLocalPath = messageId
        chat.msgDeliveryStatus = MsgDeliveryStatus.sending.rawValue
        chat.isSeenSync = true
        chat.isUploading = "pending"
        
        self.viewModel.setChatDataInRealm(item: chat, isAfterPickingImage: true)

        //This is completion handler which get called after image upload to s3.
        self.viewModel.didImageUploaded = { [weak self] isImgUploaded , imgUrl, imgMessageId in
            guard let self = self else { return }
            if isImgUploaded {
                print("success uploading image")
                self.viewModel.sendMessage(message: imgUrl, isImage: true, messageId: imgMessageId). // send image url as message to other user

            }else{
                print("error uploading image")
                self.viewModel.updateRealmAfterImageUpload(uploadStatus: "failed", uploadedUrl: "", messsageId: imgMessageId)
            }
        }

        self.viewModel.uploadImage(localPath: "\(Helper.shared.getDocumentDirectoryPath(filename: messageId)).png" ,image: compressedImage, messageId: messageId)
    }
}
swift chat xmppframework image-upload
© www.soinside.com 2019 - 2024. All rights reserved.