繁体   English   中英

如果取消NSDocument中的保存操作,则无法退出应用

[英]Cannot quit the app if I cancel the save operation in a NSDocument

我将NSDocument类子类化,以便在保存期间具有特定的行为。 我将项目保存在文件夹中,并使用用于该项目的音频文件创建特定的子文件夹。

我重写了以下函数save(to:ofType:for:delegate:didSave:contextInfo)但是我注意到了一个奇怪的行为。 假设我有以下实现:

override func save(to url: URL,
                   ofType typeName: String,
                   for saveOperation: NSDocument.SaveOperationType,
                   delegate: Any?,
                   didSave didSaveSelector: Selector?,
                   contextInfo: UnsafeMutableRawPointer?) {

    guard let customURL = createCustomUrlFrom(url: url) else { return }

    super.save(to: customURL,
               ofType: typeName,
               for: saveOperation,
               delegate: delegate,
               didSave: didSaveSelector,
               contextInfo: contextInfo)
}

我尝试创建一个自定义URL,如果我不设法这样做,则取消保存操作。

现在,如果我在保存之前退出应用程序,则该应用程序会提示我保存。 如果无法创建自定义URL并return (在super.save…调用之前),则退出按钮或“ cmd + q”不起作用! 我不得不退出以关闭该应用程序。

有人看到我在这里做错了吗? 后台是否正在运行某些阻止我关闭该应用程序的内容?

UPDATE

可能来自我们退出已编辑文档时提示的工作表。 我们在窗口中说Do you want to save the changes made to the document “Untitled”? 使用3个按钮Dont's savecancel save...

如果单击保存,则该项目已经存在,我会显示一个窗口,让用户替换该项目或取消保存(在createTargetUrlFrom(url:)函数中完成。如果用户选择取消该应用程序,则无法退出。所以我想也许第一个窗口在后台运行...

我找到了解决此问题的方法!

实际上,该应用程序正在等待对NSTerminateLater的答复。 我需要使用reply(toApplicationShouldTerminate :)函数。 所以我只是在从保护声明返回之前添加了NSApp.reply(toApplicationShouldTerminate: false)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM