2010-05-30 77 views

回答

13

沒有我知道的通知。你可以得到一個定時器火每當新的一天開始,像這樣:

[[NSTimer alloc] initWithFireDate:midnight 
         interval:60 * 60 * 24 //one day, in seconds 
          target:someObj 
         selector:@selector(someSelector) 
         userInfo:nil 
          repeats:YES]; 

竅門就是一個NSDate設置爲午夜。請查看Date and Time Programming Guide瞭解如何使用日期組件等。

編輯:見this問題如何獲得午夜NSDate

35

如果是iPhone開發,還可以聽UIApplicationSignificantTimeChangeNotification。它會在比午夜抵達更多的場合發佈,但是當您收到時,您可以簡單地檢查您是否在午夜或接近午夜。

對於Mac OS X,您需要完成Tom Dalling的建議,但您也應該自己跟蹤changes to the system clock(以更新計時器)以及changes to the current time zone

+0

+1我從來沒有聽說過此通知。謝謝! – 2010-05-30 15:33:58

+0

謝謝你們的答案。看來,我只能接受他們中的一個,還沒有投票給他們。不幸的是,這是爲Mac OS X - UIApplicationSignificantTimeChangeNotification將正是我正在尋找.. – 2010-05-30 19:23:26

12

從iOS8開始,您還可以直接收聽NSCalendarDayChangedNotification。

+2

謝謝!這在Mac OS X上也是可用的,從10.9開始(Mavericks)。比創建NSTimer要好得多。 – robotspacer 2015-10-10 00:58:08

3

正如其他人所說,在iOS 8中,您可以使用NSCalendarDayChangedNotification。在如何做到這一點,這post給你更多的信息。

本質NSCalendarDayChangedNotification需要你去你的appDelegate文件並插入應用程序下面的代碼(改編自指南斯威夫特3):

NotificationCenter.default.addObserver(self, selector: #selector(ViewController.dayChangedOperations(notif:)), name:NSNotification.Name.NSCalendarDayChanged, object:nil) 

其中「視圖控制器」是我的一個類的類名和「dayChangedOperations」是我想在每天更改時運行的函數的名稱。

天計數自上次更改

注意,你從這個得到的是這一天改變了警報。你沒有得到自應用程序上次運行以來的天數。所以請記住,每次運行此函數時都要將日期保存到userDefault,以便稍後使用它進行比較。

相關問題