2010-05-30 19 views

Respuesta

13

No hay ninguna notificación que yo sepa. Usted puede obtener un temporizador para disparar cada vez que un nuevo día comienza de esta manera:

[[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 conjunto NSDate a la medianoche. Compruebe el Date and Time Programming Guide para saber cómo hacer eso con los componentes de fecha y similares.

EDITAR: vea this pregunta de cómo llegar a la medianoche NSDate.

35

Si es para el desarrollo de iPhone, también puede escuchar un 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, tendría que hacer lo que sugiere Tom Dalling, pero también debe hacer un seguimiento de changes to the system clock (para actualizar su temporizador) así como changes to the current time zone.

+0

+1 Nunca antes había escuchado sobre esta notificación. ¡Gracias! –

+0

Gracias a ambos por las respuestas. Parece que solo puedo aceptar uno de ellos y aún no votarlo. Desafortunadamente es para Mac OS X - UIApplicationSignificantTimeChangeNotification habría sido exactamente lo que estaba buscando .. –

12

A partir de iOS8, también puede escuchar NSCalendarDayChangedNotification directamente.

+2

¡Gracias! Esto también está disponible en Mac OS X, a partir de 10.9 (Mavericks). Mucho mejor que tener que crear un NSTimer. – robotspacer

3

Según lo mencionado por otros, en iOS 8 puede usar NSCalendarDayChangedNotification. En términos de cómo hacer eso, este post le brinda más información.

Esencialmente NSCalendarDayChangedNotification requiere que usted vaya a su archivo AppDelegate e insertar el código de abajo en la aplicación (adaptado de 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.

COUNT días desde el último cambio

Tenga en cuenta que todo lo que se obtiene de esto es una alerta de que el día ha cambiado. 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.

Cuestiones relacionadas