2013-10-31 9 views
5

Desidero pianificare UILocalNotificaion per 30 giorni consecutivi alle 8:00 AM ogni giorno e voglio implementare tale funzionalità solo con un'istanza UILocationNotification. Ecco il mio codice per pianificare la notifica locale.Come impostare UILocalNotification per 30 giorni consecutivi

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"HH:mm"]; 
NSDate *date = [[NSDate alloc] init]; 
date = [formatter dateFromString:@"08:00"]; 
UILocalNotification *localNotification = [[UILocalNotification alloc] init]; 
localNotification.fireDate = date; 
localNotification.timeZone=[NSTimeZone defaultTimeZone]; 
localNotification.alertBody = @"You just received a local notification"; 
localNotification.alertAction = @"View Details"; 
localNotification.soundName = UILocalNotificationDefaultSoundName; 
localNotification.repeatInterval = NSDayCalendarUnit; 
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 
[formatter release]; 
[date release]; 

Si sparerà notifiche quotidiane per sempre alle 08:00, ma voglio essere notificati solo per 30 giorni consecutivi. La soluzione più semplice è lanciare 30 UILocalNotifications ma voglio farlo con 1 istanza UILocalNotification. Come lo posso fare? Per favore aiuto.

risposta

4

Nella proprietà userInfo UILocalNotification è possibile salvare l'oggetto NSDate quando si crea una notifica. Quando apri Notifica, controlla con la data corrente con data in userinfo. Se c'è differenza è più di 30 giorni è possibile annullare la notifica locale.

+2

La soluzione funziona se i controlli utente o riceve una notifica. Ma cosa succede se l'utente non riceve o controlla alcuna notifica? –

+0

@ShahidIqbal hanno trovato una risposta a questa domanda specifica? – Ilario

+0

@llario Penso di dover andare con la risposta di Kareem. –

0
NSDate *now = [NSDate date]; 

// now a NSDate object for now + 30 days 
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 

NSDateComponents *offsetComponents = [[NSDateComponents alloc] init]; 
[offsetComponents setDay:30]; 
NSDate *endDate = [gregorian dateByAddingComponents:offsetComponents toDate:now options:0]; 

Dopo che il check:

if([currentDate isEarlierDate:endDate]){ 
//Fire the notification 
}