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都可以。
答案 0 :(得分:1)
这是否有NSNotification?
不,当日期发生变化时,Mac OS不会发送通知。
当这一天发生变化时,我需要重新分配任何“昨天”[...]标签
这取决于显示标签的UI类型。在临时用户界面(如菜单)中,最好只在显示用户界面时计算标签,并保持原样。
如果任何用户界面显示较长时间的标签(如侧边栏),则最好在日期更改时进行更新。
为此,您应该计算下一次更改的时间并设置计时器。此外,您可能希望注册一些通知以检测非标准日期更改(系统睡眠,调整系统时间,日历更改)。
Here's code完成所有这些并简单地发送通知。它适用于iOS和Mac OS。
答案 1 :(得分:-2)
一种技巧是在新的一天开始时设置NSTimer
。
beginningOfToday
(see
here for how to do that)。 beginningOfToday
之后86400秒触发(这将是一天之后)。让计时器在日期后86400秒触发
[[NSTimer alloc] initWithFireDate:beginningOfToday
interval:86400
target:`YOUR_TARGET`
selector:@selector(`YOUR_SELECTOR`)
userInfo:nil
repeats:YES];
例如,您的目标可以是self
和您的选择器dayDidChange
。