Могу ли я получить уведомление, когда начинается новый день? - PullRequest
12 голосов
/ 30 мая 2010

В Какао есть ли уведомление, на которое я могу зарегистрироваться, которое информирует меня, когда начинается новый день - в 00:00: 00 мин: 01 утра?

Ответы [ 4 ]

35 голосов
/ 30 мая 2010

Если это для разработки iPhone, вы также можете прослушать UIApplicationSignificantTimeChangeNotification . Он публикуется чаще, чем в полночь, но когда вы его получите, вы можете просто проверить, находитесь ли вы около полуночи или около нее.

Для Mac OS X вам придется делать то, что предлагает Том Даллинг, но вы также должны отслеживать изменения системных часов самостоятельно (чтобы обновить таймер), а также изменение текущего часового пояса .

13 голосов
/ 30 мая 2010

Нет уведомлений, о которых я знаю. Вы можете заставить таймер срабатывать каждый раз, когда начинается новый день, например:

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

Хитрость в том, чтобы NSDate установить в полночь. Обратитесь к Руководству по программированию даты и времени , чтобы узнать, как это сделать с компонентами даты и т. П.

РЕДАКТИРОВАТЬ: см. этот вопрос о том, как получить полночь NSDate.

12 голосов
/ 18 июня 2014

Начиная с iOS8, вы также можете напрямую прослушивать NSCalendarDayChangedNotification.

3 голосов
/ 05 декабря 2016

Как уже упоминалось, в iOS 8 вы можете использовать NSCalendarDayChangedNotification. С точки зрения того, как это сделать, этот пост дает вам больше информации.

По сути, NSCalendarDayChangedNotification требует, чтобы вы зашли в файл appDelegate и вставили в приложение следующий код (адаптировано из руководства для Swift 3):

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

Где "ViewController" - это имя класса одного из моих классов, а "dayChangedOperations" - это имя функции, которую я хочу запускать при каждом изменении дня.

Количество дней с момента последнего изменения

Обратите внимание, что все, что вы получаете от этого, - это предупреждение о том, что день изменился. Вам не дают количество дней с момента последнего запуска приложения. Поэтому не забывайте сохранять дату в userDefault при каждом запуске этой функции, чтобы вы могли использовать ее для сравнения позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...