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