Использовать NSWorkspaceDidWakeNotification для активации метода? - PullRequest
3 голосов
/ 01 марта 2012

Я создал простое приложение, чтобы узнать, как использовать 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

1 Ответ

2 голосов
/ 02 марта 2012

Вместо [[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.

...