【发布时间】:2015-12-22 23:41:50
【问题描述】:
我刚刚尝试创建一些代码(粘贴在下面)来检查一天的变化。不过,现在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)")
}
【问题讨论】:
标签: swift timezone nsdate nsnotificationcenter