当我强制我的Mac进入睡眠状态时,我成功获得NSWorkspaceWillSleepNotification:但是,如果我的计算机在能量首选项中指定的一定时间后自行进入睡眠状态,则此通知不会引发。
有解决方法吗?
答案 0 :(得分:2)
正如我的评论中提到的,我已经能够在某些计算机上重现这一点,而不是其他计算机。从一个非常快速的调查来看,看起来10.7.4不会在空闲睡眠时发送通知,除非我也称为IORegisterForSystemPower,但10.6.8确实如此。所以,它可能是10.7中的一个错误。但是,由于我的测试非常简单,它也可能是特定硬件模型中的错误,或者与我没想到的奇怪设置有关。
另一方面,这可能是故意行为 - 在这种情况下我认为文档中存在错误。虽然它没有直接表示通知是针对空闲和强制睡眠发送的,但它确实暗示了它。
NSWorkspace通知引用(由于developer.apple.com似乎失败而无法获取URL ...)表示它“在机器进入睡眠状态之前发布” - 不是“有时”或“仅用于强迫睡眠”。
QA1340(http://developer.apple.com/library/mac/#qa/qa1340/_index.html)讨论了两种类型的睡眠,并说Cocoa可用于接收通知,而没有暗示它只适用于一种。它提供了应该有效的示例代码,这就是我用来重现问题的方法。
我强烈建议向Apple提交错误报告,将您的错误报告复制到http://openradar.appspot.com,并在Apple的开发论坛上打开一个帖子。而且,如果您是付费MDP会员,请在10.8DP4.1上试用,并在开发论坛的NDA部分启动一个主题。如果10.8仍然被打破,你的雷达可能导致苹果公司在最终版本发布之前修复它,而如果没有人报告,它不太可能被修复。