【发布时间】:2012-03-20 05:39:37
【问题描述】:
我创建了一个简单的应用程序来学习如何使用 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
【问题讨论】:
-
虽然您的代码很可能不会崩溃,但您应该使用
- (void)makeSleep:(NSNotification *)notification;而不是- (IBAction)makeSleep:(id)sender。因为通知观察回调方法的用途与 IBActions 完全不同。之所以可行,仅仅是因为它们共享相同的选择器模式(即具有单个 id/object 参数的方法)。
标签: objective-c cocoa sleep wakeup nsworkspace