SwiftUI UIViewServiceErrorDomain 代码=1 终止=断开连接方法

phb*_*don 5 ios swiftui

Xcode 14.0 (14A309)、iOS 部署目标 15.0

  • 主导航视图 #1 > 导航视图 #2 > 导航视图 #3
  • 带有附加到 VStack 的 .fileImporter() 的 SwiftUI 视图 FileDownloaderView
  • FileDownloaderView 是 NavigationView #3 的子视图

当我使用 fileImporter 选择文件或取消 fileImporter 时,视图返回到 navigationView #1 而不是 navigationView #3,并显示以下日志消息:

The view service did terminate with error:
Error Domain=_UIViewServiceErrorDomain Code=1 "(null)"
UserInfo={Terminated=disconnect method}
Run Code Online (Sandbox Code Playgroud)

它以前工作得很好,但我可能在代码的其他地方做了一些更改,导致这种断开连接或导航视图之一中的某些内容为零。我无法找到错误,也无法确定错误的确切位置/时刻。

对改进调试或了解什么可能触发此类错误有任何帮助吗?

谢谢。菲利普.

org*_*tre 1

我在 XCode 15.1 中以 iOS 17.2 作为部署目标时遇到完全相同的错误。以下所有内容均假设已修改“自定义 iOS 目标属性”以具有值为“TRUE”的条目“支持文档浏览器”。重新安装 XCode 并没有为我解决这个问题。

以下内容足以重现错误(无论是取消文件导入还是选择文件时):

struct ContentView: View {
    @State private var isImporting = false

    var body: some View {
        VStack {
            Button("Import") {
                isImporting = true
            }
        }
        .fileImporter(isPresented: $isImporting, allowedContentTypes: [.json]) { result in
            print("importing")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

即使抛出错误,也会打印“正在导入”,这意味着在任何一种情况下都会正确调用 fileImporter 的 onCompletion 回调。另外在实践中我发现导入是否真正成功与是否显示此错误完全无关。

在一种情况下,我的导入失败,因为我尝试从应用程序文档文件夹外部导入文件(即,文件应用程序或 FileImporter 菜单中的“在我的 iPhone 上”下显示的名称类似于我的应用程序的文件夹)。在导入之前手动将其复制到该文件夹​​允许我导入它。在这两种情况下,上述错误仍然显示在调试器中,并且没有引发其他错误。

在另一种情况下,我的导入失败,因为我尝试使用 NULL 值(即可选属性)解码 JSON 文件,decode而不是使用decodeIfPresent. 无论导入是否成功,调试器中都会显示上述错误,而且这是唯一显示的错误!