Objective c 是否使用NSWorkspaceDidWakeNotification激活方法?

Objective c 是否使用NSWorkspaceDidWakeNotification激活方法?,objective-c,cocoa,sleep,wakeup,nsworkspace,Objective C,Cocoa,Sleep,Wakeup,Nsworkspace,我创建了一个简单的应用程序来学习如何使用NSWorkspaceWillSleepNotification和NSWorkspaceDidWakeNotification。我的目标是在计算机睡眠和醒来时调用一个方法。我创建的应用程序将相应地更改每个标签。构建应用程序后,我从桌面启动它。应用程序启动后,我让电脑进入睡眠状态。当计算机唤醒时,应用程序中的标签不会更改。我在窗口中添加了iAction按钮,以确保标签会更改。当按下按钮时,标签确实会改变。但我希望这样的事情在睡觉和醒来时自动发生。我做错了什么

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

#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
尝试使用
[NSNotificationCenter defaultCenter]

像这样:

[[NSNotificationCenter defaultCenter]添加观察者:self
选择器:@selector(makeSleep:)
NSWorkspaceWillSleepNotification
对象:无
];

[[NSNotificationCenter defaultCenter]添加观察者:self
@选择器(makeWake:)
NSWorkspaceDidWakeNotification
对象:无
];

上述内容不正确,请参阅

有必要使用
[[NSWorkspace sharedWorkspace]通知中心]


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

好的,我的问题是我需要将
NSWorkspace
放在
awakeFromNib
方法中。现在一切都好了。谢谢你的提示。我不需要更改任何其他内容。注册唤醒和睡眠通知时,绝对应该使用共享工作区的通知中心。既然你的答案被接受了,你应该对它进行编辑,这样你就不会混淆其他寻求帮助的人。这是完全错误的。苹果网站上的开发者示例中明确指出,应该使用NSWorkspace通知中心,而不是这些通知的默认中心。请看,虽然您的代码最有可能不会崩溃,但您应该使用
-(void)makeSleep:(NSNotification*)通知
而不是
-(iAction)makeSleep:(id)sender
。作为通知,观察回调方法的用途与iActions完全不同。这之所以有效,仅仅是因为它们共享相同的选择器模式(即一个具有单个id/对象参数的方法)。