【问题标题】:responding to window close in AppDelegate响应 AppDelegate 中的窗口关闭
【发布时间】:2012-01-25 12:49:03
【问题描述】:

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

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

在高层次上,当我在通过其控制器操作的子窗口中时,我不明白如何将消息发送回 AppDelegate。例如,假设在子窗口 nib 上按下了一个按钮,并且您想修改 AppDelegate 中控制的 ivar?看起来应该很简单,但似乎父 AppDelegate 的对象模型不可用。

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

父 AppDelegate 是否通过对象消息获知?如果是这样,如何?子笔尖可以有不同的所有者和委托人吗?是否可以将第二个 nib 设置为指向其控制器作为所有者并指向 AppDelegate 作为委托?我试过了,但不知道如何将它连接起来。

总而言之,在我的子笔尖通过子控制器关闭后,我如何在 AppDelegate 中执行操作。 任何帮助将不胜感激。

【问题讨论】:

    标签: cocoa


    【解决方案1】:

    您可以使用通知来通知您的 AppDelegate 采取行动。如果需要,您可以制作自己的通知,或者使用现有的通知,例如 WindowWillClose 通知。您只需告诉 NSNotification 中心 AppDelegate 想要接收消息,如下所示:

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

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

    【讨论】:

    • 谢谢。我可能执行错了。我在创建控制器对象之后但在调用 showWindow 方法之前将此代码添加到 appdelegate 中。通知不运行。关于如何在子笔尖上设置委托的任何技巧?
    • 没关系 :) 非常感谢。我将它移到了我的初始化方法中,并为每个子窗口设置了一个通知,它工作得很好。惊人的!谢谢!
    • @CocoaEv 这正是我想要做的,但无济于事,你能解释一下你把它放在哪里以及你是如何连接它的。谢谢。
    • 您可以在需要通知事件发生之前随时添加观察者。您需要观察者和被观察者(您在“对象”参数中传递的内容)都存在,因为您需要将两者都传递给上述方法。我一般在-init方法或者-awakeFromNib方法中做。添加观察者后,对象需要通过调用[NSNotificationCenter postNotificationName:object:userInfo:] 发送通知。这能回答你的问题吗?
    猜你喜欢
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    相关资源
    最近更新 更多