Question

Après goggling pendant 2 jours je ne pouvais pas trouver une solution comme si son clair pour tout le monde (mais moi)!

J'ai besoin:

Alert.applicationIconBadgeNumber = x  

pour être mis à jour en arrière-plan à chaque fois que les feux de notification, je répète Notify par:

notif.repeatInterval = NSMinuteCalendarUnit  

La répétition fonctionne très bien tous les 1 m. lorsque l'application va en arrière-plan, mais le BadgeNumber dosent sont mis à jour, il prend la 1ère valeur de date mise à jour seulement.

J'appelle la méthode scheduleNotification par viewDidLoad

Voici mon code complet:

- (void)scheduleNotification {
UILocalNotification *notif;
notif = [[[UILocalNotification alloc] init] autorelease];
notif.timeZone = [NSTimeZone defaultTimeZone];
notif.fireDate = [[NSDate date] dateByAddingTimeInterval:5];
notif.repeatInterval = NSMinuteCalendarUnit; 

NSInteger BadgeNumber = [self BadgeNumber];
NSInteger *BadgeNumberPointer = &BadgeNumber;
NSString *BadgeNumberString = [NSString stringWithFormat:@"%i", BadgeNumber];

notif.applicationIconBadgeNumber = *BadgeNumberPointer;

notif.alertBody = BadgeNumberString;
notif.alertAction = @"Hello";

[[UIApplication sharedApplication] scheduleLocalNotification:notif];
}

-(int)BadgeNumber{
NSDate *currentDateUpdate = [[NSDate alloc] init];
NSDateFormatter *formatter2 = [[NSDateFormatter alloc] init];
[formatter2 setDateFormat:@"dd"];
NSString *dateCheckUpdate = [formatter2 stringFromDate:currentDateUpdate];
NSInteger dateCheckUpdateInt = [[dateCheckUpdate substringWithRange:NSMakeRange(0, 2)] integerValue];

int BadgeNumber = dateCheckUpdateInt;
return BadgeNumber;
}

conseils Veuillez comment le résoudre ,, vous remercier tous.

Était-ce utile?

La solution

Parce que les copies du système d'exploitation de la notification au moment prévu, les données contenues dans la notification ne sont pas mis à jour, donc le numéro de badge d'application ne change pas.

Peut-être que si vous ne répétez pas la notification mais générer votre propre nouvelle notification pour chaque intervalle de temps il vous donnera le comportement dont vous avez besoin. La seule façon que je peux penser à générer des notifications comme cela est d'afficher un groupe de notifications dans votre méthode de scheduleNotification, puis ne pas oublier de supprimer les notifications lorsque les utilisateurs dans répond la bonne façon. Étant donné que le système d'exploitation ne se souvient que les suivant l'ordre chronologique prévu 64 notifications, vous ne pouvez programmer sur la valeur d'une heure. Étant donné que votre numéro de badge semble être la date actuelle, vous pouvez vérifier le temps et ne se soucier de la mise en autant de notifications si vous êtes dans une heure de minuit.

Je ne comprends pas ce que vous essayez d'accomplir par l'utilisateur lancinante si souvent, ni leur dire la date dans le numéro de badge. Toute application qui me dérangeait tellement ou mal utilisé le numéro de badge afin d'obtenir rapidement serait supprimé de mes appareils iOS. Peut-être ce que vous repensant essayez d'accomplir peut vous diriger vers une meilleure solution.

Autres conseils

Je sais que cela a déjà répondu, mais vous pouvez utiliser NSUserDefaults comme un moyen de mettre en cache le nombre de badge. Puis, en applicationIconBadgeNumber vous pouvez simplement utiliser quelque chose comme ceci:

notif.applicationIconBadgeNumber = ([NSUserDefaults standardUserDefaults] integerForKey:@"badgeCount"] + 1);

et alors vous pouvez le réinitialiser lorsque les utilisateurs en conséquence répond.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top