我创建了一个简单的应用程序来学习如何使用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
答案 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
方法上添加观察者。