Как назвать файл, сохраненный в приложении «Файлы», с помощью UActivityViewController - PullRequest
0 голосов
/ 03 января 2019

У меня есть содержимое, хранящееся в переменной String в моем приложении, и я хочу сохранить его как файл в приложении Files.Ну, это легко и описано, например, здесь Сохранить документ в приложении «Файлы» в swift , но мне интересно, можно ли присвоить файлу собственное имя.iOS назначает неявное имя Text.txt.Спасибо.

1 Ответ

0 голосов
/ 04 января 2019
@IBAction func btnExportData(_ sender: Any) {
    let prompt = UIAlertController(title: "Export data for counter", message: "Provide file name:", preferredStyle: .alert)
    prompt.addTextField {(textField) in textField.text = ""}
    prompt.addAction(UIAlertAction(title: "Export", style: .default, handler: {
        (_) in
        do {
            let export = try self.objMeasurements.exportData(forCounterID: self.counterID)
            let fm = FileManager.default
            let fileFolder = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
            let fileURL = fileFolder.appendingPathComponent(prompt.textFields![0].text! + ".csv")
            do {
                try export.write(to: fileURL, atomically: true, encoding: String.Encoding.utf8)
            } catch {
                self.showOkAlert(messageTitle: "File " + fileURL.absoluteString + " can't be created.", messageText: "Method: btnExportData", okText: "OK", {})
            }
            let sharing = UIActivityViewController(activityItems: [fileURL], applicationActivities: nil)
            sharing.completionWithItemsHandler = {
                (type, completed, items, error) in
                do {
                    try fm.removeItem(at: fileURL)
                    self.showOkAlert(messageTitle: "Temporary file was successfully deleted.", messageText: fileURL.absoluteString, okText: "OK", {})
                } catch {
                    self.showOkAlert(messageTitle: "File " + fileURL.absoluteString + " can't be deleted.", messageText: "Method: btnExportData", okText: "OK", {})
                }
            }
            sharing.popoverPresentationController?.barButtonItem = self.navigationItem.rightBarButtonItems?.first
            self.present(sharing, animated: true, completion: nil)
        } catch measurementErrors.measurementGetFailed(let message) {
            self.showOkAlert(messageTitle: message[0], messageText: message[1], okText: "OK", {})
        } catch counterErrors.counterGetFailed(let message) {
            self.showOkAlert(messageTitle: message[0], messageText: message[1], okText: "OK", {})
        } catch elementErrors.elementGetFailed(let message) {
            self.showOkAlert(messageTitle: message[0], messageText: message[1], okText: "OK", {})
        } catch {
            self.showOkAlert(messageTitle: "Unknown error during data export", messageText: "Method: btnExportData", okText: "OK", {})
        }
    }))
    prompt.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
    present(prompt, animated: true, completion: nil)
}
...