Я создал простое приложение, чтобы узнать, как использовать NSWorkspaceWillSleepNotification и NSWorkspaceDidWakeNotification. Моя цель - вызвать метод, когда компьютер спит и просыпается. Приложение, которое я создал, соответствующим образом изменит каждую метку. После создания приложения я запускаю его с рабочего стола. После запуска приложения я заставляю компьютер спать. Когда компьютер просыпается, метки в приложении не меняются. Я добавил кнопки IBAction в окно, чтобы убедиться, что метки будут меняться. При нажатии кнопок метки действительно меняются. Но я хочу, чтобы что-то подобное происходило автоматически во сне и после пробуждения. Что я делаю не так?Использовать NSWorkspaceDidWakeNotification для активации метода?
#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 *); вместо' - (IBAction) makeSleep: (id) sender'. поскольку методы обратного вызова для наблюдения служат совершенно другой цели, чем ** IBActions **. Тот факт, что это работает, просто благодаря тому, что они имеют один и тот же шаблон выбора (то есть метод с одним аргументом id/object). – Regexident