Удаление данных из кэша после переключения на другой ViewController в TabBarController

Задачака наверное простая для профессионалов, но у меня затык. Приложение использует визуальнкю структуру через TabBarController. На одном из View происходит запись аудиофайла и выгрузка его в Firebase Storage. После первичного запуска приложения все работает отлично, но как только пытаюсь записать следующий аудиофайл, то выгрузка в Firebase Storage не получается и выскакивает ошибка в консоле

Failed to upload post : Error Domain=FIRStorageErrorDomain Code=-13000 "An unknown error occurred, please check the server response." UserInfo={object=records/OLCSOHRmR2dnqDZToW9u0co9hB62/A75ED159-EE32-4F05-827A-38954E79CC71, ResponseBody=Can not finalize upload. Current size is 82613. Expected final size is 81355., bucket=...................., data={length = 79, bytes = 0x43616e20 6e6f7420 66696e61 6c697a65 ... 73203831 3335352e }, data_content_type=text/plain; charset=utf-8, NSLocalizedDescription=An unknown error occurred, please check the server response., ResponseErrorDomain=com.google.HTTPStatus, ResponseErrorCode=400}

Запись файла происходит следующим образом

func setupRecorder() {
        let format = DateFormatter()
        format.dateFormat="yyyy-MM-dd-HH-mm-ss"
        let currentFileName = "recording-\(format.string(from: Date())).m4a"
        let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
        self.soundFileURL = documentsDirectory.appendingPathComponent(currentFileName)
        if FileManager.default.fileExists(atPath: soundFileURL.absoluteString) {
            // probably won't happen. want to do something about it?
        }
        
        let recordSettings: [String: Any] = [
            AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
            AVSampleRateKey: 44100.0,
            AVNumberOfChannelsKey: 1,
            AVEncoderAudioQualityKey: AVAudioQuality.max.rawValue,
            AVEncoderBitRateKey: 128000
        ]
        do {
            recorder = try AVAudioRecorder(url: soundFileURL, settings: recordSettings)
            recorder.delegate = self
            recorder.isMeteringEnabled = true
            recorder.prepareToRecord()
            recorder.record()// creates/overwrites the file at soundFileURL
        } catch {
            recorder = nil
            print(error.localizedDescription)
        }
    }

Тут я получаю путь аудиофайла soundFileURL, затем загружаю его в Firebase Storage

@IBAction func uploadButtonTapped(_ sender: UIBarButtonItem) {
        activityIndicator.startAnimating()
        guard let title = titleRecordTextView.text, title.count > 0 else { return }
        guard let recordURL = soundFileURL else { return }
        navigationItem.rightBarButtonItem?.isEnabled = false
        filename = NSUUID().uuidString
        
        guard let uid = Auth.auth().currentUser?.uid else { return }
        
        let recordRef = Storage.storage().reference().child("records/\(uid)").child(filename)
        recordRef.putFile(from: recordURL, metadata: nil) { (metadata, err) in
            print("Record:", recordURL)
            print("Metadata:", metadata)
            
            if let err = err {
                self.activityIndicator.stopAnimating()
                self.navigationItem.rightBarButtonItem?.isEnabled = true
                print("Failed to upload post :", err)
                return
            }
            
            recordRef.downloadURL { url, error in
                if let error = error {
                    print("Failed to fetch postUrl:", error)
                    return
                } else {
                    guard let recordUrl = url?.absoluteString else { return }
                    print("Successfully uploaded record:", recordUrl)
                    
                    self.saveToDatabaseWithRecordUrl(recordUrl: recordUrl)
                    self.saveToDatabaseWithRecordUrlSeparately(recordUrl: recordUrl)
                    
                    self.playerStopRecord()
                    self.recordingTimeLabel.text = "00:00"
                    self.stopButton.alpha = 1
                    self.recordButton.isEnabled = true
                    self.recordButton.alpha = 1
                    self.recordingTimeLabel.alpha = 1
                    self.recordingTimeLimitLabel.alpha = 1
                    self.setupPlayingControls()
                    self.addRecordCount()
                    self.titleRecordTextView.resignFirstResponder()
                    self.sourceRecordTextView.resignFirstResponder()
                    self.maxCharacterSourceLabel.text = "\(100)"
                    self.maxCharacterTitleLabel.text = "\(100)"

                    self.tabBarController?.selectedIndex = 0

                    self.recordExists = false
                    NotificationCenter.default.post(name: RecordViewController2.updateFeedNotificationName, object: nil)
                    self.activityIndicator.stopAnimating()
                    
                }
            }
        }
    }

После загрузки ухожу на первый экран TabBarController при помощи метода self.tabBarController?.selectedIndex = 0. После повторной попытки записи файла, файл записывается, но все метаданные ему присваиваются предыдущего файла (я смотрю это по print("Metadata:", metadata)), то есть они как бы остаются в кэше. Как удалить данные после выгрузки предыдущего файла и потом записать их заново для нового аудиофайла? Спасибо


Ответы (0 шт):