Cocoa NSL窗口调整通知

Cocoa NSL窗口调整通知,cocoa,nswindow,Cocoa,Nswindow,我正在准备比较三种语言的课程中的第二个例子是处理窗口大小调整事件。它在Java和C#中的等价物中工作得很简单,但在MacCocoa框架中,NSWindow resize事件的委托处理程序从未被调用。我添加到头文件中 - (void)windowDidResize: (NSNotification *)notification; 和到实现文件 - (void)windowDidResize: (NSNotification *)notification { NSString *nam

我正在准备比较三种语言的课程中的第二个例子是处理窗口大小调整事件。它在Java和C#中的等价物中工作得很简单,但在MacCocoa框架中,NSWindow resize事件的委托处理程序从未被调用。我添加到头文件中

- (void)windowDidResize: (NSNotification *)notification; 
和到实现文件

- (void)windowDidResize: (NSNotification *)notification 
{
    NSString *name = notification.name;
    NSLog (@"Window was resized, notification %s", name);
}
当我调整窗口大小时,消息从未发出。我做错了什么?鼠标事件正常工作。
[MacBook Pro OSX 10.6.8,Xcode 3.2.6 64位]

您的obj必须是代表,或者您已明确向通知中心注册以获取通知

我的两分钱用于swift 5。(同时显示委托和通知,选择一个…)


您是否确实将要成为委托的对象设置为委托?这通常是通过将窗口的代理出口连接到NIB中的代理对象来完成的。此外,代理通常是窗口控制器,是NIB的所有者,在NIB中由文件的所有者占位符表示。我不知道如何使主窗口同时成为委托人和方法。Aaron Hillegass的优秀著作为我提供了所需的线索:我添加了[nc addObserver:self selector:@selector(windowDidResize:)NSNotificationCenter*nc=[NSNotificationCenter defaultCenter];[nc addObserver:self selector:@selector(windowDidResize:)除非进行观察的对象“很远”,否则不需要注册从窗口。通常,您的NSDocument或NSWindowController是创建窗口的对象(在极少数情况下是您的应用程序代理),它们应该已经是您窗口的代理。如果不是,请将代理出口连接到“文件的所有者”在XIB中,或执行
myWindow.delegate=myWindowController;
或其他操作。@Downvoter:怎么了?我回答为什么OP显示的方法不被称为通知方法。通知方法对我有效。谢谢。
  import Cocoa

class ViewController: BaseController, NSWindowDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.makeItListenZoom()
    }



    override func viewDidAppear() {
        self.view.window?.delegate = self

    }


    private final func makeItListenZoom(){
        NotificationCenter.default.addObserver(forName: NSWindow.didResizeNotification, object: nil, queue: OperationQueue.main) { (n: Notification) in

            print("didresize---")
        }
    }



    func windowDidResize(_ notification: Notification){
           print("windowDidResize")
       }
}