gpt4 book ai didi

ios - 当用作 DocumentGroup 的工具栏修饰符中的按钮修饰符时,SwiftUI fileExporter 不存在

转载 作者:行者123 更新时间:2023-12-05 04:39:43 26 4
gpt4 key购买 nike

在 iOS 的特定场景下,我无法让 .fileExporter 在 SwiftUI 中呈现:当在 DocumentGroup 场景的工具栏中用作按钮修饰符时。

请参阅下面显示问题的代码。

预期结果:当用户按下“保存文件”按钮时,.fileExporter 应该出现并提示用户保存文件。

实际结果:即使状态变量已更改且文档不为零,似乎也没有发生任何事情。

问题出现在 iOS 15.0 模拟器以及使用硬件的 iOS 15.1 和 15.2 中。这不会出现在 macOS 12.0 中。

有没有人遇到过这个问题?有已知的解决方法吗?


import SwiftUI

@main
struct myApp: App {

@State private var showingFileExporter = false

var body: some Scene {
DocumentGroup(newDocument: myDocument()) { file in
ContentView(document: file.$document)
.toolbar {
Button("Save File") {
showingFileExporter = true
}
.fileExporter(isPresented: $showingFileExporter,
document: file.document,
contentType: UTType.exampleText) { result in
}
}
}
}
}


import UniformTypeIdentifiers

extension UTType {
static var exampleText: UTType {
UTType(importedAs: "com.example.plain-text")
}
}

struct myDocument: FileDocument {
var text: String

init(text: String = "Hello, world!") {
self.text = text
}

static var readableContentTypes: [UTType] { [.exampleText] }

init(configuration: ReadConfiguration) throws {
guard let data = configuration.file.regularFileContents,
let string = String(data: data, encoding: .utf8)
else {
throw CocoaError(.fileReadCorruptFile)
}
text = string
}

func fileWrapper(configuration: WriteConfiguration) throws -> FileWrapper {
let data = text.data(using: .utf8)!
return .init(regularFileWithContents: data)
}
}


struct ContentView: View {
@Binding var document: myDocument
var body: some View {
TextEditor(text: $document.text)
}
}


最佳答案

我的 fileImporter 也遇到了同样的问题,如果您将它移到我们的 .toolbar 上下文中,它确实可以工作

这是我的代码:

 .toolbar {
Button("Import") {
presentImporter.toggle()
}
}
.fileImporter(isPresented: $presentImporter, allowedContentTypes: [.mp3]) { result in
switch result {
case .success(let url):
print(url)

let newBook = Book(context: viewContext)
newBook.name = "\(url.lastPathComponent)"
newBook.url = url
newBook.origin = playlist.self

try? viewContext.save()
let _ = print("New book", newBook.name as Any)
let _ = print("inside", newBook.origin as Any)

case .failure(let error):
print(error)
}
}

关于ios - 当用作 DocumentGroup 的工具栏修饰符中的按钮修饰符时,SwiftUI fileExporter 不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70395656/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com