我正在尝试使用Swift在macOS中保存文件。我的应用程序中有以下设置:
在info.plist中,我设置了这个键,并显示一条消息,我需要访问桌面:
Privacy - AppleEvents Sending Usage Description 虽然我从来没有见过应用程序发出这样的请求。
在我的沙箱中,我为用户选择的文件设置了读/写

我使用NSOpenPanel让用户选择一个文件。然后,该应用程序以编程方式对所选文件进行更改。我在文本视图中显示更改。然后,我为用户提供了保存更改的选项。这是通过NSSavePanel和以下代码完成的:
if let thisFileURL = currentFileURL {
guard let window = view.window else { return }
let panel = NSSavePanel()
panel.directoryURL = FileManager.default.homeDirectoryForCurrentUser
panel.nameFieldStringValue = thisFileURL.lastPathComponent
panel.title = "Saving changes...";
panel.showsResizeIndicator = true;
panel.showsHiddenFiles = false;
panel.canCreateDirectories = true;
panel.allowedFileTypes = ["html"]
panel.beginSheetModal(for: window) { (result) in
if (panel.runModal() == NSApplication.ModalResponse.OK), let saveFileURL = panel.url, let strToSave = self.strCleanContents {
do {
try strToSave.write(to: saveFileURL, atomically: true, encoding: .utf8)
} catch {
self.myAppManager.displayInfoAlert("Unmable to save file:\n\(error.localizedDescription)", self, [], false, response: {(bResponse:Bool) in })
}
}
}currentFileURL是用户最初选择的文件的URL。strCleanContents是用户选择的文件中经过编辑的字符串。
当我测试它时,没有抛出任何错误。但也什么也没发生。SavePanel打开,我可以导航到一个位置,如果我选择了原始文件所在的位置,它会询问我是否要覆盖该文件。单击保存虽然不会做任何事情,但面板只是停留在那里。我不能取消进程,它没有关闭,文件没有写入。
发布于 2020-07-02 23:39:10
beginSheetModal和runModal都会显示保存面板。调用beginSheetModal将面板显示为工作表,或调用runModal将面板显示为窗口。
https://stackoverflow.com/questions/62643522
复制相似问题