Objective c (BOOL)windowShouldClose:(id)发送方不';t在我设置为主菜单的contentview的视图中工作';窗户

Objective c (BOOL)windowShouldClose:(id)发送方不';t在我设置为主菜单的contentview的视图中工作';窗户,objective-c,cocoa,nsevent,Objective C,Cocoa,Nsevent,我将NSViewController的视图设置为主菜单窗口的contentview,现在应该如何使用-(BOOL)windowShouldClose:(id)sender 我在@interface中使用,并将-(BOOL)windowShouldClose:(id)sender放在.m上,但不起作用-(BOOL)windowShouldClose:(id)sender只被发送给将发送消息的窗口的代理。(如果你不清楚代表是什么,他们有点像每个人都向其报告的陆军指挥官) 在这里,为了能够在NSVie

我将NSViewController的视图设置为主菜单窗口的contentview,现在应该如何使用-(BOOL)windowShouldClose:(id)sender

我在@interface中使用
,并将
-(BOOL)windowShouldClose:(id)sender
放在.m上,但不起作用

-(BOOL)windowShouldClose:(id)sender
只被发送给将发送消息的窗口的代理。(如果你不清楚代表是什么,他们有点像每个人都向其报告的陆军指挥官)

在这里,为了能够在
NSViewController
中使用
-windowShouldClose:
,您需要将
NSViewController
设置为窗口的
委托。这有两个步骤:

  • 使“NSViewController”成为可能的窗口 代表。通常窗口的委托是
    NSWindowController
    (命名它是有原因的),但是如果你想 “NSViewController”您需要使用
    协议,您已经完成了

  • 实际上,将视图控制器设置为委托。作为肯·托马斯 在他的评论中提到,您可以在Interface Builder中通过 拖动窗口的
    代理
    出口并将其连接到您的 NSViewController。或者,您可以通过编程方式执行此操作:
    [self.view.window setDelegate:self]
    如您所述,应该可以正常工作


  • 您是说您正在尝试将NSViewController设置为窗口的代理吗?那是很不寻常的。这通常是窗口的控制器(尽管它可以是任何对象)。无论如何,您需要将窗口的
    委托
    属性设置为指向其委托对象。由于
    delegate
    也是NSWindow的一个出口,您可以在IB中进行连接。或者,您可以在代码中进行连接。我希望当用户关闭窗口时(我将NSViewController的视图设置为其内容的窗口)。您的意思是我使用viewController中的[self.view.window setDelegate'?我在mainMenu.xib中连接窗口的委托,在我将viewController的视图设置为窗口的内容视图之前,我执行
    [self.vController对象.view.window setDelegate:self];
    ,然后使用
    -(BOOL)windowShouldClose:(id)发送方
    在视图控制器中,但不起作用。如果您已经在Interface Builder中完成了,则无需在代码中再次执行此操作。|此外,在代码中:您希望以什么作为委托?如果您希望视图控制器作为委托,并且您正在从AppDelegate类调用,则需要
    [self.vControllerObject.view.window setDelegate:vControllerObject]
    ,或者更好的方法是,
    [self.window setDelegate:vControllerObject]
    ,如果您有随模板提供的窗口属性。