使用NSWorkspaceDidWakeNotification激活方法?

时间:2012-03-01 17:35:14

标签: objective-c cocoa sleep wakeup nsworkspace

我创建了一个简单的应用程序来学习如何使用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

1 个答案:

答案 0 :(得分: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方法上添加观察者。