响应AppDelegate中的窗口关闭

时间:2012-01-25 04:36:44

标签: cocoa

非常感谢这个网站。很多帖子最近给了我很多帮助。

这个窗口问题看似简单,但我找不到简单的参考来解决我的需要。我正在构建一个管理打印机的简单应用程序。主屏幕有一个tableview,由从cups服务器中提取的数据数组驱动。基本上它显示了该计算机上安装的打印机。有两个子窗口。每个都有自己的窗口控制器和nib文件。为清楚起见,我将其称为子笔尖或子窗口控制器。每个人都做了一些不同的事情,但会影响系统打印机。我想确保当子窗口关闭并将控制返回到主屏幕时,主屏幕窗口(由AppDelegate控制)通过重新加载tableview来响应(用打印机更新操作系统级别的任何更改)。 / p>

在高级别,当我在通过它的控制器运行的子窗口中时,我不明白如何将消息发送回AppDelegate。举个例子,假设在子窗口笔尖上按下一个按钮,你想要修改AppDelegate中控制的ivar吗?似乎应该很简单,但似乎父AppDelegate的对象模型不可用。

在较低级别,我不确定如何让AppDelegate知道窗口已关闭。我很幸运能够通过windowWillClose通知让子窗口控制器知道它正在关闭 - 当我将子笔尖的委托设置为子窗口控制器时,这是有效的。但仍然是父控制器AppDelegate不知道,我不知道如何从子窗口控制器告诉AppDelegate做什么。

父AppDelegate是否通过对象消息了解?如果是这样,怎么样?子笔尖是否可以拥有不同的所有者和代理人?是否可以将第二个笔尖设置为指向其控制器作为所有者并指向AppDelegate作为委托?我试过了,但无法弄清楚如何连接它。

总结一下,在子控制器通过子控制器关闭后,如何在AppDelegate中执行操作。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

您可以使用通知通知您的AppDelegate采取行动。您可以根据需要自行发出通知,也可以使用WindowWillClose通知等现有通知。您只需告诉NSNotification中心AppDelegate想要接收消息,如下所示:

[[NSNotificationCenter defaultCenter] addObserver:myAppDelegate
    selector:@selector(subWindowClosed:)
    name:NSWindowWillCloseNotification
    object:subWindow]

当子窗口关闭时,这将在app委托上调用你的-subWindowClosed:方法。