Swift 如何命名通过UAActivityViewController存储到文件应用程序的文件
我的应用程序中有字符串变量存储的内容,我想将其作为文件保存到文件应用程序中。好吧,这很简单,在这里举例说明,但我想知道是否有可能为文件指定自定义名称。iOS指定隐式名称Text.txt。Swift 如何命名通过UAActivityViewController存储到文件应用程序的文件,swift,uiactivityviewcontroller,Swift,Uiactivityviewcontroller,我的应用程序中有字符串变量存储的内容,我想将其作为文件保存到文件应用程序中。好吧,这很简单,在这里举例说明,但我想知道是否有可能为文件指定自定义名称。iOS指定隐式名称Text.txt。 谢谢。将URL传递到构造函数中活动项数组参数中的文件。我还没有文件。我刚刚将文件内容编程生成为字符串变量。let sharing=UIActivityViewController(activityItems:[export],applicationActivities:nil),其中导出为字符串变量将其分解为单
谢谢。将URL传递到构造函数中活动项数组参数中的文件。我还没有文件。我刚刚将文件内容编程生成为字符串变量。let sharing=UIActivityViewController(activityItems:[export],applicationActivities:nil),其中导出为字符串变量将其分解为单独的任务:获取字符串并使用UTF8编码将其转换为数据。在文件系统中,您希望将数据保存在什么位置——我建议使用临时目录——并创建一个URL。对数据使用方法将数据写入该URL。将该URL交给UIActivityViewController。通过谷歌搜索,您应该能够找到如何执行这些步骤的示例。祝你好运谢谢,我是这样做的。只有在UIActivityViewController消失后,Little才努力删除临时文件,但最终通过定义completionWithItemsHandler解决了这一问题。我将把我的代码放在下面,供其他人参考。也许并不完美,但它对我很有用。请注意,completionWithItemsHandler可能会被调用多次,最终可能会过早删除该文件。
@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)
}