[英]Time change notification (hours and minutes) in objc
時間變化時,是否有最佳方法來獲取通知?
我正在使用NSTimer
,它每隔0,002秒檢查一次是否更改了時間(小時和分鍾,而不是秒和毫秒),以使應用程序中的標簽與電話時鍾保持每分鍾同步。
我希望有更好的解決方案。
謝謝
如果您只想在分鍾更改時進行更新,則可以做到這一點:
NSDate *date = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [calendar components:NSHourCalendarUnit fromDate:date];
[self performSelector:@selector(minuteHasChanged) withObject:nil afterDelay:(60 - dateComponents.minute)];
而且,如果可以確定只調用一次此方法,則可以執行以下操作:
- (void)minuteHasChanged {
//do stuff
NSDate *date = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [calendar components:NSHourCalendarUnit fromDate:date];
[self performSelector:@selector(minuteHasChanged) withObject:nil afterDelay:(60 - dateComponents.minute)];
}
設置從下一分鍾開始的循環計時器:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
let nextMinuteDate = NSCalendar.currentCalendar().nextDateAfterDate(NSDate(), matchingUnit: .Second, value: 0, options: [.MatchNextTime])!
self.minuteDidChangeTimer = NSTimer(fireDate: nextMinuteDate, interval: 60.0, target: self, selector: "minuteDidChangeTimer:", userInfo: nil, repeats: true)
NSRunLoop.currentRunLoop().addTimer(self.minuteDidChangeTimer, forMode: NSDefaultRunLoopMode)
:
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
self.minuteDidChangeTimer.invalidate()
self.minuteDidChangeTimer = nil
:
}
您可能還希望更新UI以響應UIApplicationSignificantTimeChangeNotification
的重大意外更改,即“更改為新的一天(午夜),運營商時間更新以及夏令時前后的更改”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.