Я разрабатываю приложение для iOS и использую fileExporter для экспорта данных в различные текстовые форматы (csv, json и т. д.). Я переместил вид и модели кнопки «Экспорт» в отдельные файлы (структуру и класс), и у меня возникли проблемы, когда FileExporter не появляется. Похоже, что TextFileDocument пуст, и я не могу понять, почему. После нажатия кнопки «CSV» ничего не произошло.
Заранее спасибо за ваши идеи.
import SwiftUI
import UniformTypeIdentifiers
struct ExportButtonView: View {
@ObservedObject private var vm: ExportButtonViewModel = ExportButtonViewModel()
@State private var showingExporter: Bool = false
@State private var showingChooseExportDataType: Bool = false
var body: some View {
Image(systemName: "square.and.arrow.up")
.onTapGesture {
showingChooseExportDataType.toggle()
}
.confirmationDialog("Choose data format to export", isPresented: $showingChooseExportDataType, titleVisibility: .visible) {
Button("CSV") {
vm.initExportingTypeAndDocument(exportDataType: .csv)
showingExporter.toggle()
}
// Put here buttons for other formats
.fileExporter(
isPresented: $showingExporter,
document: vm.exportingDocument,
contentType: .plainText,
defaultFilename: "data.\(vm.exportDataType)"
) { result in
switch result {
case .success(let url):
print("Saved to \(url)")
case .failure(let error):
print(error.localizedDescription)
}
}
}
}
}
class ExportButtonViewModel: ObservableObject {
var exportDataType: TextFileDataExporterManager.ExportDataType = .csv
var exportingDocument: TextFileDocument?
func initExportingTypeAndDocument(exportDataType: TextFileDataExporterManager.ExportDataType){
self.exportDataType = exportDataType
self.exportingDocument = TextFileDocument(initialText: TextFileDataExporterManager(data: ["Test1", "Test2"], dataFormatType: exportDataType).getFormattedText())
}
}
struct HomeView: View {
var body: some View {
ExportButtonView()
}
}
protocol TextFileDataExporter {
var data: [String] { get }
func getFormattedText() -> String
}
class TextFileDataExporterManager: TextFileDataExporter {
var data: [String]
let dataFormatType: ExportDataType
enum ExportDataType: String {
case csv
}
init(data: [String], dataFormatType: ExportDataType) {
self.data = data
self.dataFormatType = dataFormatType
}
func getFormattedText() -> String {
switch dataFormatType {
case .csv:
return CsvExporter(data: data).getFormattedText()
}
}
}
class CsvExporter: TextFileDataExporter {
var data: [String]
init(data: [String]) {
self.data = data
}
func getFormattedText() -> String {
return "Here;will;be;some;csv;data"
}
}
struct TextFileDocument: FileDocument {
// tell the system we support only plain text
static var readableContentTypes = [UTType.plainText]
// by default our document is empty
var text = ""
// a simple initializer that creates new, empty documents
init(initialText: String = "") {
text = initialText
}
// this initializer loads data that has been saved previously
init(configuration: ReadConfiguration) throws {
if let data = configuration.file.regularFileContents {
text = String(decoding: data, as: UTF8.self)
}
}
// this will be called when the system wants to write our data to disk
func fileWrapper(configuration: WriteConfiguration) throws -> FileWrapper {
let data = Data(text.utf8)
return FileWrapper(regularFileWithContents: data)
}
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... not-appear
SwiftUI: fileExporter не появляется ⇐ IOS
Программируем под IOS
1716834509
Anonymous
Я разрабатываю приложение для iOS и использую fileExporter для экспорта данных в различные текстовые форматы (csv, json и т. д.). Я переместил вид и модели кнопки «Экспорт» в отдельные файлы (структуру и класс), и у меня возникли проблемы, когда FileExporter не появляется. Похоже, что TextFileDocument пуст, и я не могу понять, почему. После нажатия кнопки «CSV» ничего не произошло.
Заранее спасибо за ваши идеи.
import SwiftUI
import UniformTypeIdentifiers
struct ExportButtonView: View {
@ObservedObject private var vm: ExportButtonViewModel = ExportButtonViewModel()
@State private var showingExporter: Bool = false
@State private var showingChooseExportDataType: Bool = false
var body: some View {
Image(systemName: "square.and.arrow.up")
.onTapGesture {
showingChooseExportDataType.toggle()
}
.confirmationDialog("Choose data format to export", isPresented: $showingChooseExportDataType, titleVisibility: .visible) {
Button("CSV") {
vm.initExportingTypeAndDocument(exportDataType: .csv)
showingExporter.toggle()
}
// Put here buttons for other formats
.fileExporter(
isPresented: $showingExporter,
document: vm.exportingDocument,
contentType: .plainText,
defaultFilename: "data.\(vm.exportDataType)"
) { result in
switch result {
case .success(let url):
print("Saved to \(url)")
case .failure(let error):
print(error.localizedDescription)
}
}
}
}
}
class ExportButtonViewModel: ObservableObject {
var exportDataType: TextFileDataExporterManager.ExportDataType = .csv
var exportingDocument: TextFileDocument?
func initExportingTypeAndDocument(exportDataType: TextFileDataExporterManager.ExportDataType){
self.exportDataType = exportDataType
self.exportingDocument = TextFileDocument(initialText: TextFileDataExporterManager(data: ["Test1", "Test2"], dataFormatType: exportDataType).getFormattedText())
}
}
struct HomeView: View {
var body: some View {
ExportButtonView()
}
}
protocol TextFileDataExporter {
var data: [String] { get }
func getFormattedText() -> String
}
class TextFileDataExporterManager: TextFileDataExporter {
var data: [String]
let dataFormatType: ExportDataType
enum ExportDataType: String {
case csv
}
init(data: [String], dataFormatType: ExportDataType) {
self.data = data
self.dataFormatType = dataFormatType
}
func getFormattedText() -> String {
switch dataFormatType {
case .csv:
return CsvExporter(data: data).getFormattedText()
}
}
}
class CsvExporter: TextFileDataExporter {
var data: [String]
init(data: [String]) {
self.data = data
}
func getFormattedText() -> String {
return "Here;will;be;some;csv;data"
}
}
struct TextFileDocument: FileDocument {
// tell the system we support only plain text
static var readableContentTypes = [UTType.plainText]
// by default our document is empty
var text = ""
// a simple initializer that creates new, empty documents
init(initialText: String = "") {
text = initialText
}
// this initializer loads data that has been saved previously
init(configuration: ReadConfiguration) throws {
if let data = configuration.file.regularFileContents {
text = String(decoding: data, as: UTF8.self)
}
}
// this will be called when the system wants to write our data to disk
func fileWrapper(configuration: WriteConfiguration) throws -> FileWrapper {
let data = Data(text.utf8)
return FileWrapper(regularFileWithContents: data)
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78540511/swiftui-fileexporter-does-not-appear[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия