3

我正在为 Mac Catalyst 应用程序寻找除 UIActivityViewController 之外的替代导出菜单。虽然这可行,但用户无法选择他们想要保存文件的位置(文件是列表中所有项目的 JSON 文件),我希望用户能够选择他们想要保存 JSON 的目录到。我尝试了以下代码,但是当您尝试保存文件时,它给出了错误“错误域 = NSCocoaErrorDomain 代码 = 260 '文件 'name.json' 无法打开,因为没有这样的文件'”。

编码:

let fileManager = FileManager.default

do {
    let fileURL2 = fileManager.temporaryDirectory.appendingPathComponent("\(detailedList.lname!).json")

    // Write the data out into the file
    try jsonData.write(to: fileURL2)

    // Present the save controller. We've set it to `exportToService` in order
    // to export the data -- OLD COMMENT
    let controller = UIDocumentPickerViewController(url: fileURL2, in: UIDocumentPickerMode.exportToService)
    present(controller, animated: true) {
        // Once we're done, delete the temporary file
        try? fileManager.removeItem(at: fileURL2)
    }
} catch {
    print("error creating file")
}

我已经尝试用谷歌搜索其他方式或方法来让它工作,但我找不到任何可以在 Mac Catalyst 上工作的东西。我知道您可以这样做,因为我已经看到其他应用程序和示例可以做到这一点,但对我没有任何帮助。那么这样做的可能替代方法或此代码的解决方案是什么?

4

1 回答 1

2

问题是您在用户有机会选择要保存的位置之前删除了要保存的文件。

try? fileManager.removeItem(at: fileURL2)一旦显示文档选择器,就会调用您调用的完成处理程序。

正确的解决方案是在 UIDocumentPickerDelegate 方法中删除文件,而不是在出现选择器时删除。

于 2019-10-25T18:15:17.370 回答