Mac Catalyst 的替代 UIActivityViewController 保存对话框或 UIDocumentPickerViewController 抛出错误代码 260 的解决方案

Posted

技术标签:

【中文标题】Mac Catalyst 的替代 UIActivityViewController 保存对话框或 UIDocumentPickerViewController 抛出错误代码 260 的解决方案【英文标题】:Alternative UIActivityViewController save dialog for Mac Catalyst or solution for UIDocumentPickerViewController throwing error code 260 【发布时间】:2019-10-25 17:57:13 【问题描述】:

我正在为 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 上工作的东西。我知道您可以这样做,因为我已经看到其他应用程序和示例可以做到这一点,但对我没有任何帮助。那么有什么可能的替代方法来执行此操作或此代码的解决方案?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

非常感谢!这解决了我的问题。

以上是关于Mac Catalyst 的替代 UIActivityViewController 保存对话框或 UIDocumentPickerViewController 抛出错误代码 260 的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

Mac-catalyst - Mac 催化剂应用程序的最小窗口大小

UIMarkupTextPrintFormatter 和 Mac Catalyst

Mac Catalyst textview 第一响应者

使用 Crashlytics 构建 Mac Catalyst

Mac Catalyst 应用程序如何处理生命周期转换?

Mac Catalyst 是不是支持 UIActivityViewController?