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