在停留2天后,我找不到任何解决方案,好像对每个人都清楚(但是我)!
我需要:
Alert.applicationIconBadgeNumber = x
每次通知触发时都会在后台更新,我通过以下方式重复通知:
notif.repeatInterval = NSMinuteCalendarUnit
每1米重复工作正常。当应用程序进入后台,但BadgeNumber剂量更新时,它仅采用第一个更新日期值。
我通过viewDidLoad调用scheduleNotification方法
- (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;
}
请建议如何修理它,感谢你们所有人。
答案 0 :(得分:1)
由于操作系统在计划时复制通知,因此通知中的数据不会更新,因此应用程序徽章编号不会更改。
如果您不重复通知但是为每个时间间隔生成自己的新通知,它可能会为您提供所需的行为。我可以想到生成这样的通知的唯一方法是在scheduleNotification方法中发布一堆通知,然后记住在用户以正确的方式响应时删除通知。由于操作系统仅记住下一个按时间顺序排列的64个通知,因此您只能安排大约一个小时的价值。由于您的徽章编号似乎是当前日期,因此您可以检查时间,只有在午夜一小时内设置如此多的通知时才会费心。
我不明白你想要通过经常唠叨用户来完成什么,也不会告诉他们徽章编号中的日期。任何困扰我的应用程序或滥用徽章编号的应用程序都会很快从我的iOS设备中删除。也许重新思考你想要完成的事情可能会引导你找到更好的解决方案。
答案 1 :(得分:1)
我知道这已经得到了解答,但您可以使用NSUserDefaults作为缓存徽章计数的方法。然后在applicationIconBadgeNumber
中你可以使用这样的东西:
notif.applicationIconBadgeNumber = ([NSUserDefaults standardUserDefaults] integerForKey:@"badgeCount"] + 1);
然后您可以在用户做出相应响应时重置它。