首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSSavePanel Swift未保存

NSSavePanel Swift未保存
EN

Stack Overflow用户
提问于 2020-06-30 01:24:10
回答 1查看 153关注 0票数 2

我正在尝试使用Swift在macOS中保存文件。我的应用程序中有以下设置:

在info.plist中,我设置了这个键,并显示一条消息,我需要访问桌面:

代码语言:javascript
复制
Privacy - AppleEvents Sending Usage Description 

虽然我从来没有见过应用程序发出这样的请求。

在我的沙箱中,我为用户选择的文件设置了读/写

我使用NSOpenPanel让用户选择一个文件。然后,该应用程序以编程方式对所选文件进行更改。我在文本视图中显示更改。然后,我为用户提供了保存更改的选项。这是通过NSSavePanel和以下代码完成的:

代码语言:javascript
复制
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打开,我可以导航到一个位置,如果我选择了原始文件所在的位置,它会询问我是否要覆盖该文件。单击保存虽然不会做任何事情,但面板只是停留在那里。我不能取消进程,它没有关闭,文件没有写入。

EN

回答 1

Stack Overflow用户

发布于 2020-07-02 23:39:10

beginSheetModalrunModal都会显示保存面板。调用beginSheetModal将面板显示为工作表,或调用runModal将面板显示为窗口。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62643522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档