2013-06-18 2 views
4

Я полезна для этой области разработки приложений. Я пытаюсь получить уведомления во время входа в систему & событий выхода. Я пробовал с NSWorkSpaceNotifications, но он не работает для меня.Как найти Вход и выход из событий в Mac?

Может кто-нибудь мне помочь.

-(void)logInLogOutNotifications{ 
    NSNotificationCenter *notCenter; 
    notCenter = [[NSWorkspace sharedWorkspace] notificationCenter]; 
    [notCenter addObserver:self 
        selector:@selector(observerMethod) 
         name:NSWorkspaceWillPowerOffNotification object:nil]; 
} 

-(void)observerMethod:(NSNotification *)senderNotification;{ 

    NSLog(@"System Logout Notification is called***********************"); 

} 
+0

вы используете NSThread для logInLogOutNotifications? –

+0

Нет. Я просто позвоню в main.m. – RashmiG

+0

поделитесь своим основным кодом функции. –

ответ

3

NSApplicationMain Начните RunLoop. Вы вызываете функцию logInLogOutNotifications из функции main(), поэтому вы запускаете runloop. или позвоните logInLogOutNotifications в applicationDidFinishLaunching

-(void)logInLogOutNotifications{ 
    NSNotificationCenter *notCenter; 
    notCenter = [[NSWorkspace sharedWorkspace] notificationCenter]; 
    [notCenter addObserver:self 
        selector:@selector(observerMethod) 
         name:NSWorkspaceWillPowerOffNotification object:nil]; 
[[NSRunLoop currentRunLoop] run]; 
} 
+0

Еще не нашел уведомление. И я столкнулся с другой проблемой при запуске [[NSRunLoop currentRunLoop]]; код. Если я добавляю его, то мой элемент меню не отображается. Если мы прокомментируем эту строку, тогда я смогу увидеть menuitem – RashmiG

+0

Спасибо parag Bafna :) Это работает для меня :) – RashmiG

+0

Привет, друзья .. NSWorkspaceWillPowerOffNotification работает отлично для меня раньше. Но теперь я добавил уведомления NSWorkspaceWillSleepNotification & NSWorkspaceDidWakeNotification. Теперь выход из системы, перезагрузка и выключение не работают. Я имею в виду (NSWorkspaceWillPowerOffNotification) observerMethod не получает вызов. пожалуйста, помогите мне – RashmiG

3

Ваш метод принимает один аргумент, так что вы должны изменить

@selector(observerMethod) 

в

@selector(observerMethod:) 
2

Если вы похожи на меня и возникли проблемы, выяснить, почему в в мире вы не получаете уведомление NSWorkspaceWillPowerOffNotification, убедитесь, что вы настраиваете себя как наблюдателя [[NSWorkspace sharedWorkspace] notificationCenter] и -NOT- [NSNotificationCenter defaultCenter]!

Я потратил большую часть дня, пытаясь отладить, почему я не получал это уведомление, потому что я не читал ответ четко!

1

Если вы хотите знать, когда пользователь в отставку или стать активными вы просто должны подписаться на следующие уведомления:

Swift 3

NSWorkspace.shared().notificationCenter.addObserver(self, selector: #selector(sessionResignActive(_:)), name: NSNotification.Name.NSWorkspaceSessionDidResignActive, object: nil) 
    NSWorkspace.shared().notificationCenter.addObserver(self, selector: #selector(sessionBecomeActive(_:)), name: NSNotification.Name.NSWorkspaceSessionDidBecomeActive, object: nil) 

 Смежные вопросы

  • Нет связанных вопросов^_^