每30秒UILocalNotification
我试图设置一个UILocalNotification
使用以下逻辑每30秒运行一次,但它似乎是行为不端。 有两个问题:
- 当通知被解雇的时候,似乎有很多都是一次性的,而不是每30秒一次。
- 应用程序图标的徽章号码似乎并没有增加。 它只停留在1。
请有人帮我弄清楚我做错了什么吗?
// Create 'base' notification we can use UILocalNotification *baseNotification = [[UILocalNotification alloc] init]; baseNotification.timeZone = [NSTimeZone defaultTimeZone]; baseNotification.repeatInterval = NSMinuteCalendarUnit; baseNotification.alertBody = @"My Message."; baseNotification.alertAction = @"My Alert Action"; baseNotification.soundName = UILocalNotificationDefaultSoundName; UILocalNotification *alertOne = [baseNotification copy]; alertOne.applicationIconBadgeNumber++; alertOne.fireDate = [[NSDate date] dateByAddingTimeInterval:30]; [[UIApplication sharedApplication] scheduleLocalNotification:alertOne]; UILocalNotification *alertTwo = [baseNotification copy]; alertTwo.applicationIconBadgeNumber++; alertTwo.fireDate = [[NSDate date] dateByAddingTimeInterval:60]; [[UIApplication sharedApplication] scheduleLocalNotification:alertTwo];
目前没有办法实现自定义重复间隔。
但是,通知系统最多可以排队64个通知,所以您可以做的最接近的事情就是手动设置尽可能多的通知(每个通知都有不同的徽章号码和不同的fireDate),然后将通知列表当你跑得很低时,通过设置新的更新。
这将返回您在队列中的多less通知:
[[[UIApplication sharedApplication] scheduledLocalNotifications] count]
还有这个post,我会build议你阅读进一步的帮助:
iOS徽章号码实时更新
祝你好运!
试试这个。
UILocalNotification *baseNotification = [[UILocalNotification alloc] init]; baseNotification.timeZone = [NSTimeZone defaultTimeZone]; baseNotification.repeatInterval = NSMinuteCalendarUnit; baseNotification.alertBody = @"My Message."; baseNotification.alertAction = @"My Alert Action"; baseNotification.soundName = UILocalNotificationDefaultSoundName; UILocalNotification *alertOne = [baseNotification copy]; alertOne.fireDate = [[NSDate date] dateByAddingTimeInterval:30]; alertOne.applicationIconBadgeNumber = [[UIApplication sharedApplication]applicationIconBadgeNumber]+1; UILocalNotification *alertTwo = [baseNotification copy]; alertTwo.fireDate = [[NSDate date] dateByAddingTimeInterval:60]; alertTwo.applicationIconBadgeNumber = [[UIApplication sharedApplication]applicationIconBadgeNumber]+1;
关于第二点,你增加了副本的徽章号码,而不是原来的通知。 而且由于原始零徽章号码,你总是会得到一个零徽章号码的副本,增加它会使它总是1。
解决办法是在复制之前增加原始通知的徽章:
... baseNotification.applicationIconBadgeNumber++; UILocalNotification *alertOne = [baseNotification copy]; alertOne.fireDate = [[NSDate date] dateByAddingTimeInterval:30]; [[UIApplication sharedApplication] scheduleLocalNotification:alertOne]; baseNotification.applicationIconBadgeNumber++; UILocalNotification *alertTwo = [baseNotification copy]; alertTwo.fireDate = [[NSDate date] dateByAddingTimeInterval:60]; [[UIApplication sharedApplication] scheduleLocalNotification:alertTwo];
根据NSObject类的参考:
copy – 返回copyWithZone返回的对象:
copyWithZone返回一个浅拷贝。 所以它像所有通知具有相同的属性。 因此,徽章号码总是“1”,并且fireDate对于所有通知都是相同的。 即最后一个你申请。 因此,通知同时被解雇。
希望能帮助到你。
我想你每30秒收到很多通知是因为你没有取消以前的通知。 在代码的顶部添加这一行。
[[UIApplication sharedApplication] cancelAllLocalNotifications];