4

Я делаю приложение для Mac, где нужно что-то делать, когда компьютер просыпается, засыпает и просыпается, но я не могу заставить слушателя работать. Я чувствую, что все пробовал. В AppDelegate.swift, внутри функции applicationDidFinishLaunching, у меня есть:Не удается получить NSWorkspaceDidWakeNotification в swift OSX

NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self, selector: "sleepListener", name: NSWorkspaceWillSleepNotification, object: nil) 
NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self, selector: "wakeUpListener", name: NSWorkspaceDidWakeNotification, object: nil) 

и внутри AppDelegate.swift но за пределами функции applicationDidFinishLaunching, у меня есть:

func sleepListener(aNotification : NSNotification) { 
    print("Sleep Listening"); 
} 

func wakeUpListener(aNotification : NSNotification) { 
    print("Wake Up Listening"); 
} 

Я попробовал сочетание многих разных вещей, чтобы исправить проблему. Я попытался прослушивать NSNotificationCenter.defaultCenter(), я попытался изменить селектор на «sleepListener:» и «wakeUpListener:», я попытался удалить аргументы из обеих функций, и до сих пор ничего не работало. И действительно интересно то, что у меня есть два других слушателей работать отлично «NSWorkspaceScreensDidSleepNotification» и «NSWorkspaceScreensDidWakeNotification», называя их с

NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self, selector: "screenSleepListener", name: NSWorkspaceScreensDidSleepNotification, object: nil) 

и

NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self, selector: "screenWakeUpListener", name: NSWorkspaceScreensDidWakeNotification, object: nil) 

ссылающегося функций

func screenSleepListener() { 
    print("Screen Sleep Listening"); 
} 

func screenWakeUpListener() { 
    print("Screen Wake Up Listening"); 
} 

Итак, это что-то я делаю неправильно? Это что-то, о чем я должен сообщить об ошибке? Если кто-то другой может запустить этот код в файле, пусть их дисплей и компьютер засыпают, и посмотрите, будут ли они получать те же ошибки, что было бы очень полезно. И если кто-то знает, что в мире я делаю неправильно, это будет еще лучше.

Спасибо заранее!

ответ

2

Я вижу, что этот пост был давным-давно.

С вашего поста у меня создается впечатление, что вы сделали две перестановки в неправильном порядке.

NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self, selector: "sleepListener", name: NSWorkspaceWillSleepNotification, object: nil) 
    NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self, selector: "wakeUpListener", name: NSWorkspaceDidWakeNotification, object: nil) 
func sleepListener() { 
    print("Sleep Listening"); 
} 

func wakeUpListener() { 
    print("Wake Up Listening"); 
} 

ИЛИ

NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self, selector: "sleepListener:", name: NSWorkspaceWillSleepNotification, object: nil) 
     NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self, selector: "wakeUpListener:", name: NSWorkspaceDidWakeNotification, object: nil) 

func sleepListener(aNotification : NSNotification) { 
    print("Sleep Listening"); 
} 

func wakeUpListener(aNotification : NSNotification) { 
    print("Wake Up Listening"); 
} 

ИЛИ и даже еще лучше

NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self, selector: "sleepListener:", name: NSWorkspaceWillSleepNotification, object: nil) 

NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self, selector: "sleepListener:", name: NSWorkspaceDidWakeNotification, object: nil) 

func sleepListener(aNotification : NSNotification) { 
      if aNotification.name == NSWorkspaceWillSleepNotification{ 
       print("Going to sleep") 
      }else if aNotification.name == NSWorkspaceDidWakeNotification{ 
       print("Woke up") 
      }else{ 
       print("Some other event other than the first two") 
      } 
     } 

Это также важно, где вы добавляете этих наблюдателей. Для меня они оба были в делегате приложения, и они оба работали.

Надеюсь, что поможет

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