我刚刚尝试创建一些代码(粘贴在下面)来检查一天的变化。但是,现在I'm reading表示日期更改有特殊功能。
NSCalendarDayChangedNotification
显然它适用于iOS8及更高版本。但人们继续使用“你可以听它”的短语......好像使用该功能就像调到一个广播电台。我查了一下,最后一个WWDC提供了一些相关代码的演示文稿:
对日期变化做出反应•您可能希望在运行时运行一些代码 日更改NSCalendarDayChangedNotification•示例
noteCenter = [NSNotificationCenter defaultCenter];
observer = [noteCenter addObserverForName:NSCalendarDayChangedNotification
object:nil
queue:nil
usingBlock:^(NSNotification *note) {
// your code here
}];
我的问题
我发现的PDF并没有说太多其他内容。所以我的问题是这个功能是如何工作的? PDF让它看起来真的只是这么简单,粘贴代码并且我已经完成了。真的吗?它会调整时区吗?我是否必须启用它所引用的通知中心?
我的代码(不确定它是否可行):
//Find out if it's a new day
let lastDateUsed_NSDefault = NSUserDefaults.standardUserDefaults()
if let endOf_LastDateUsed = lastDateUsed_NSDefault.objectForKey("lastDateUsed") as! NSDate! {
print("Success! NSUserDefault key: 'lastDateUsed' returned \(endOf_LastDateUsed)")
//Check if the day has changed
let calendar = NSCalendar.currentCalendar()
let startOfToday = calendar.startOfDayForDate(now)
if endOf_LastDateUsed.compare(startOfToday) == NSComparisonResult.OrderedAscending {
//endOf_LastDateUsed is greater than startOfToday.
print("Do nothing! Last date used must have been today!")
} else if endOf_LastDateUsed.compare(startOfToday) == NSComparisonResult.OrderedAscending {
//Day has changed. Run alert.
//Save "endOfToday" date value to NSDefault
let endOfToday = startOfToday.dateByAddingTimeInterval(24 * 60 * 60)
NSUserDefaults.standardUserDefaults().setObject(endOfToday, forKey:"lastDateUsed")
print("Time stored in NSDefault: \(endOfToday)")
}
}
else {
print("Failure! NSUserDefault key: 'lasteDateUsed' returned nothing. No record.")
//First time user - Set end of today
let calendar = NSCalendar.currentCalendar()
let startOfToday = calendar.startOfDayForDate(now)
print("startOfToday: \(startOfToday)")
let endOfToday = startOfToday.dateByAddingTimeInterval(24 * 60 * 60)
//Store
NSUserDefaults.standardUserDefaults().setObject(endOfToday, forKey:"lastDateUsed")
print("Time stored in NSDefault: \(endOfToday)")
}
答案 0 :(得分:2)
documentation(确实比我希望的那样难以定位)相当清楚:
每当系统日历日发生变化时发布,由系统日历,区域设置和时区决定。
所以是的,它应该适当地处理夏令时变化,因为它知道时区。我不知道启用通知中心,但这应该很容易通过调整设备上的系统时钟或时区来测试,看看会发生什么。
(文档中 约会。值得你尝试一下。)