2012-07-03 15 views
9

sto cercando di implementare la notifica localeiPhone: le notifiche quotidiano locale

Questo è quello che ho posto

// Current date 
    NSDate *date = [NSDate date]; 

    // Add one minute to the current time 
    NSDate *dateToFire = [date dateByAddingTimeInterval:20]; 

    // Set the fire date/time 
    [localNotification setFireDate:dateToFire]; 
    [localNotification setTimeZone:[NSTimeZone defaultTimeZone]]; 

Invece di 20, voglio mettere un tempo fisso (al giorno) per iniziare a spingere.

Ad esempio: desidero inviare un messaggio di notifica ogni 6:00.

Come si può fare?

Grazie

risposta

27

Hai solo bisogno di creare correttamente un oggetto NSDate per essere la data di fuoco (tempo). Invece di usare [NSDate dateByAddingTimeInterval: 20], usare qualcosa di simile:

NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDateComponents *components = [[NSDateComponents alloc] init]; 
[components setDay: 3]; 
[components setMonth: 7]; 
[components setYear: 2012]; 
[components setHour: 6]; 
[components setMinute: 0]; 
[components setSecond: 0]; 
[calendar setTimeZone: [NSTimeZone defaultTimeZone]]; 
NSDate *dateToFire = [calendar dateFromComponents:components]; 

Here are the Apple NSDateComponents API docs

E poi, quando si aggiunge la data alla notifica, impostare l'intervallo di ripetizione per un giorno:

[localNotification setFireDate: dateToFire]; 
[localNotification setTimeZone: [NSTimeZone defaultTimeZone]]; 
[localNotification setRepeatInterval: kCFCalendarUnitDay]; 

Come tutto il codice relativo alla data, assicurati di verificare come funziona durante il passaggio all'ora legale, se il tuo fuso orario utilizza l'ora legale.

+0

in console ho provato a trovare la data dell'incendio, che è "2012-07-03 00:30:00 +0000" non sono sicuro, questo fuoco ogni giorno? – iscavengers

+0

@iscavengers, Si spara ogni giorno se si imposta l'intervallo di ripetizione su 'kCFCalendarUnitDay', come ho mostrato nel codice sopra – Nate

+0

come sarà tradotto in SWIFT? –

3

Immagino che quello che ti serve sia NSDayCalendarUnit.

È possibile controllare la risposta this. E here è un altro tutorial che vale la pena leggere.

1
NSDate *alertTime = [[NSDate date] dateByAddingTimeInterval:10]; 
    UIApplication* app = [UIApplication sharedApplication]; 

    UILocalNotification* notifyAlarm = [[[UILocalNotification alloc] init] autorelease]; 
    if (notifyAlarm) 
    { 
     notifyAlarm.fireDate = alertTime; 
     notifyAlarm.timeZone = [NSTimeZone defaultTimeZone]; 
     notifyAlarm.repeatInterval = 0; 
     notifyAlarm.soundName = @"Glass.aiff"; 
     notifyAlarm.alertBody = @"Staff meeting in 30 minutes"; 

     [app scheduleLocalNotification:notifyAlarm]; 
    } 
Problemi correlati