4

我创建了一个简单的应用程序来学习如何使用 NSWorkspaceWillSleepNotification 和 NSWorkspaceDidWakeNotification。我的目标是在计算机睡眠和唤醒时调用一个方法。我创建的应用程序将相应地更改每个标签。构建应用程序后,我从桌面启动它。应用程序启动后,我让计算机进入睡眠状态。当计算机唤醒应用程序中的标签时,不要更改。我在窗口中添加了 IBAction 按钮以确保标签会更改。当按下按钮时,标签确实会改变。但我希望这样的事情在睡眠和醒来时自动发生。我究竟做错了什么?

#import "Controller.h"

@implementation Controller

- (void)fileNotifications {

    [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver: self 
                                                           selector: @selector(makeSleep:) 
                                                               name: NSWorkspaceWillSleepNotification 
                                                             object: nil];

    [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver: self 
                                                           selector: @selector(makeWake:) 
                                                               name: NSWorkspaceDidWakeNotification 
                                                             object: nil];
}

- (IBAction)makeSleep:(id)sender {
    [sleepLabel setStringValue:@"Computer Slept!"];
}

- (IBAction)makeWake:(id)sender {
    [wakeLabel setStringValue:@"Computer Woke!"];
}


@end
4

1 回答 1

2

而不是[[NSWorkspace sharedWorkspace] notificationCenter]尝试使用[NSNotificationCenter defaultCenter]

像这样:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(makeSleep:) NSWorkspaceWillSleepNotification object:nil ];

[[NSNotificationCenter defaultCenter] addObserver:self @selector(makeWake:) NSWorkspaceDidWakeNotification object:nil ];

以上不正确,见https://developer.apple.com/library/mac/qa/qa1340/_index.html

使用[[NSWorkspace sharedWorkspace] notificationCenter]是必要的。

- (void)awakeFromNib您应该在方法上添加观察者。

于 2012-03-02T15:22:05.063 回答