Удаление данных из кэша после переключения на другой 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)), то есть они как бы остаются в кэше. Как удалить данные после выгрузки предыдущего файла и потом записать их заново для нового аудиофайла? Спасибо