当一天变化时,NSNotification?

时间:2014-08-28 07:00:23

标签: macos cocoa notifications

WebKit的WebHistory API按日期隔离其项目。因此,当一天发生变化时,我需要重新分配任何“昨天”和/或“(早期)今天”(或“明天”!)标签。这是否有NSNotification?或者我是否必须依赖NSTimer或-performSelector:withObject:andDelay:或其他一些技术?

(当然,替代方法不会自动处理回溯。)

附录

在撰写本文时,有两个答案,但后来删除了第三个答案。它有最全面的回应。它提到了WWDC-2013 Session 227,它讨论了Mavericks中日期/时间系统的无证添加内容。改进了今天的检查和一天的更改通知。您可以查看two-thirds down the Foundation Release Notes for OS X v10.9

(如果已删除答案的所有者想要收回某些东西,我会转移答案标记,如果可能的话。)我在2013年底拿到我的Mac并立即将其升级为Mavericks,所以我不关心pre -Mavericks系统和仅限Mavericks的API都可以。

2 个答案:

答案 0 :(得分:1)

  

这是否有NSNotification?

不,当日期发生变化时,Mac OS不会发送通知。

  

当这一天发生变化时,我需要重新分配任何“昨天”[...]标签

这取决于显示标签的UI类型。在临时用户界面(如菜单)中,最好只在显示用户界面时计算标签,并保持原样。

如果任何用户界面显示较长时间的标签(如侧边栏),则最好在日期更改时进行更新。

为此,您应该计算下一次更改的时间并设置计时器。此外,您可能希望注册一些通知以检测非标准日期更改(系统睡眠,调整系统时间,日历更改)。

Here's code完成所有这些并简单地发送通知。它适用于iOS和Mac OS。

答案 1 :(得分:-2)

一种技巧是在新的一天开始时设置NSTimer

  1. 获取当天的开始beginningOfTodaysee here for how to do that)。
  2. 创建一个计时器,以便在beginningOfToday之后86400秒触发(这将是一天之后)。
  3. 如有必要,每天都有计时器。
  4. 让计时器在日期后86400秒触发

    [[NSTimer alloc] initWithFireDate:beginningOfToday
                                 interval:86400
                                   target:`YOUR_TARGET`
                                 selector:@selector(`YOUR_SELECTOR`)
                                 userInfo:nil
                                 repeats:YES];
    
    例如,

    您的目标可以是self和您的选择器dayDidChange