iPhone - NSWeekCalendarUnit和NSWeekdayCalendarUnit有什么区别?

5
我正在尝试使用这些值设置UILocalNotification的repeatingInterval,但是像往常一样,苹果文档非常模糊。 有任何线索吗?谢谢。
3个回答

5
也许看看我刚找到的关于这个主题的博客会有所帮助?
据我所知,NSCalendarUnits 主要用于将日期或时间间隔分解为日期组件 (NSDateComponents),提取日期的星期几、年份、时间的小时组件等。
在这种情况下:
  • 日期的 NSWeekCalendarUnit 对应于一年中的周索引 (从第1周到第52周 - 或者对于有53周的年份是第53周)
  • NSWeekdayCalendarUnit 对应于一周中的某一天 (从周一到周日)
  • NSDayCalendarUnit 对应于一年中的某一天 (从1到365)
当使用 repeatingInterval 和 NSCalendarUnit 类型时,当相应的单位发生变化时,UILocalNotification 将被触发:
  • NSWeekCalendarUnit 将每周触发通知 (每7天一次)
  • NSWeekdayCalendarUnit 将触发“每个工作日”的通知,在这里与 NSDayCalendarUnit 相同,它在重复间隔的上下文中对应于“每天”。

我得多吃点维生素,因为这个解释让我的大脑感到疼痛。你的意思是在使用repeatingInterval上下文中:NSWeekCalendarUnit会在每周同一天响铃一次,而NSWeekdayCalendarUnit = NSDayCalendarUnit = 每天都会响铃,对吗?如果是这样,苹果公司里有人疯了,应该把他们关在带衬垫的直接包里。求确认。谢谢回答。 - Duck
1
是的,我确认这一点,这很合理。NSWeekCalendarUnit = 每周一次。NSDayCalendarUnit = 每天一次。NSWeekdayCalendarUnit = 不要在 repeatingInterval 上下文中使用它,以避免再次阅读代码时头痛,并将其保留在将日期拆分为 NSDateComponents 的上下文中使用。 - AliSoftware
为什么苹果文档不是这样写的呢?显然有两个苹果:一个惊人的、简单的、面向客户的苹果,一个是开发者的炼狱。感谢您的帮助。 - Duck
1
实际上它们是有用的。永远不要忘记查看编程指南,这些是人们经常忽略的重要资源;苹果的文档是我见过的最详细的文档之一,涵盖了各种主题,包括示例代码、编程指南、DevPedia等等,但大多数人只阅读“类参考”(如果您需要有关特定主题的更多信息,则远远不够)。在您的情况下,请务必阅读日期和时间编程指南!! - AliSoftware

2

Cocoa和Objective-C使得很容易编写快速测试程序以查看结果。如果您不确定文档,可以随时自行检查。我有一个构建Foundation命令行工具的项目,我只需在main.m中输入这些片段并记录它们,以查看API返回的内容。

例如,我刚运行了这个:

unsigned flags = NSWeekCalendarUnit;
NSDateComponents *components = [[NSCalendar currentCalendar] components:flags fromDate:[NSDate date]];
NSLog(@"Week: %ld", [components week]);

flags = NSWeekdayCalendarUnit;
components = [[NSCalendar currentCalendar] components:flags fromDate:[NSDate date]];
NSLog(@"WeekDay: %ld", [components weekday]);

并获得

Week: 37
Weekday: 7

很快就能看出,WeekCalendar单元将其作为一年中的第37周给出,而WeekDay则表示这是本周的第7天(因为我知道格里高利历把星期日算作第1天)。


谢谢,但在UILocalNotification的repeatingInterval上下文中是什么意思?这是否意味着通知将在自上次触发以来37周或7天后再次触发? - Duck

0

NSWeekdayCalendarUnit 意味着每个星期日您将收到通知。

NSWeekCalendarUnit 意味着每7天您将收到通知。


难道不是一样的吗?从一个星期日到下一个星期日我们有七天...我的大脑感到疼痛。 - Duck
如果你要为当天添加通知,而今天是星期天的话,这两种方式都是相同的。但是,如果你只想为周末添加通知,则需要使用NSWeekdayCalendarUnit。这意味着你将会在每个周末收到通知。而在NSWeekCalendarUnit中,它表示从当前日期开始到7天后的时间段内,你将会收到通知。 - Rahul Juyal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接