【问题标题】:Intercepting NSDocument close before "Save changes?" sheet在“保存更改?”之前拦截 NSDocument 关闭?床单
【发布时间】:2018-02-26 16:14:22
【问题描述】:

我有一个基于NSDocument 的应用程序,其中文档的窗口可能有子窗口,在关闭文档之前需要查询这些子窗口以进行更改。所以我尝试通过拦截关闭文档窗口来做到这一点,但是我找不到可靠的方法。

我尝试为此使用-[Document canCloseDocumentWithDelegate:shouldCloseSelector:contextInfo:],但显然只有在文档发生更改时才会调用它(由-updateChangeCount 发出信号)。如果没有更改,则永远不会调用它。

我使用视图控制器的viewWillDisappear 更新文档的另一次尝试也失败了,因为注册文档的任何更改为时已晚,因此它们不会被保存(canCloseDocumentWithDelegate:... 已经在此调用点。)

解决这个问题的最佳方法是什么?

【问题讨论】:

  • 为什么不更新更改计数?
  • 啊,这很难解释。我想保持子窗口中的更改独立于主文档,因此用户可以决定不将子窗口中的更改保存到主文档中。但我可能会改变它以采用更传统的方法。
  • 你有没有设法解决这个问题?我也有同样的问题。我有一个文本字段,通常只有在用户按下 Return 后才会提交,但是当文档关闭时,我需要将这些更改与文档一起保存。
  • 我接受了@Amin Negm-Awad 的建议 - 我更改了结构,以便主窗口知道“子”窗口的任何更改。想来想去,觉得合乎逻辑。

标签: objective-c nsdocument


【解决方案1】:

好吧,我想说的是,如果子窗口包含在文档关闭之前必须要求的更改,那么文档 更改。这应该反映在(主)文档窗口中。然而,……

如果文档不包含更改并且因此文档系统不要求保存自己,则应该调用 -shouldCloseWindow:

【讨论】:

  • 您可能对第一个陈述是正确的,也许我必须更改应用程序的结构。 -shouldCloseWindow确实被调用了;但它与viewDidDisappear 有同样的问题——添加任何更改到文档中为时已晚。但我可能会选择#1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多