cocoa - usar - ¿Puedo recibir una notificación cuando comience un nuevo día?
como usar la cocoa (4)
En Cocoa, ¿hay alguna notificación que me pueda registrar, que me informe, cuando comience un nuevo día, a las 00h: 00min: 01s de la mañana?
Como mencionan otros, en iOS 8 puedes usar NSCalendarDayChangedNotification. En términos de cómo hacer eso, esta publicación te brinda más información.
Esencialmente, NSCalendarDayChangedNotification requiere que vaya a su archivo de aplicaciónDelegate e inserte el siguiente código en la aplicación (adaptado de la guía para Swift 3):
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.dayChangedOperations(notif:)), name:NSNotification.Name.NSCalendarDayChanged, object:nil)
Donde "ViewController" es el nombre de clase de una de mis clases y "dayChangedOperations" es el nombre de la función que quiero ejecutar cada vez que cambia el día.
Cuente días desde el último cambio
Tenga en cuenta que todo lo que obtiene de esto es una alerta de que el día cambió. No se le da el número de días desde la última ejecución de la aplicación. Así que recuerde guardar la fecha en un userDefault cada vez que se ejecute esta función, para que pueda usarla para compararla más adelante.
Si es para el desarrollo de iPhone, también puede escuchar una UIApplicationSignificantTimeChangeNotification . Se publica en más ocasiones que la llegada de la medianoche, pero cuando recibes uno, simplemente puedes verificar si estás cerca de la medianoche.
Para Mac OS X, debe hacer lo que sugiere Tom Dalling, pero también debe hacer un seguimiento de los cambios en el reloj del sistema usted mismo (para actualizar su temporizador), así como los cambios en la zona horaria actual .
A partir de iOS8, también puedes escuchar NSCalendarDayChangedNotification directamente.
No hay notificación que sepa. Puede hacer que un temporizador se active cada vez que un nuevo día comienza así:
[[NSTimer alloc] initWithFireDate:midnight
interval:60 * 60 * 24 //one day, in seconds
target:someObj
selector:@selector(someSelector)
userInfo:nil
repeats:YES];
El truco es conseguir un NSDate
configurado para la medianoche. Consulte la Guía de programación de fecha y hora para saber cómo hacer eso con los componentes de fecha y similares.
EDITAR: vea esta pregunta sobre cómo obtener el NSDate
medianoche.