Подтвердить что ты не робот

Могу ли я получить уведомление, когда начнется новый день?

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

4b9b3361

Ответ 1

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

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

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

EDIT: см. этот вопрос о том, как получить полночь NSDate.

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

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

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

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

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