Iphone UILocalNotification每30秒一次
我试图使用以下逻辑将Iphone UILocalNotification每30秒一次,iphone,ios,objective-c,ios7,uilocalnotification,Iphone,Ios,Objective C,Ios7,Uilocalnotification,我试图使用以下逻辑将UILocalNotification设置为每30秒运行一次,但它似乎有问题。有两个问题: 当通知被触发时,似乎有很多通知同时被触发,而不是每30秒触发一次 应用程序图标徽章编号似乎没有增加。它只是停留在1 有人能帮我找出我做错了什么吗 // Create 'base' notification we can use UILocalNotification *baseNotification = [[UILocalNotification alloc] init]; base
UILocalNotification
设置为每30秒运行一次,但它似乎有问题。有两个问题:
// 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];
关于第二点,您增加的是副本的徽章编号,而不是原始通知。由于原始版本的徽章编号为零,因此您将始终获得一份徽章编号为零的副本,并且增加它将使其始终为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都相同。i、 e.你申请的最后一个。 因此,通知会同时被触发 希望有帮助。试试这个
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;
目前没有办法实现自定义的间隔重复 但是,通知系统最多可以将64个通知排队,因此您可以做的最接近的事情是手动设置所需数量的通知(每个通知都有不同的徽章编号和不同的fireDate),然后在通知数量不足时通过设置新通知来更新通知列表 这将返回您在队列中的通知数量:
[[[UIApplication sharedApplication] scheduledLocalNotifications] count]
我还建议您阅读以下文章,以获得进一步帮助:
祝你好运 我想你每30秒收到很多通知是因为你没有取消以前的通知。在代码顶部添加这一行
[[UIApplication sharedApplication] cancelAllLocalNotifications];
你说的“通知被触发时”是什么意思?您是否同时看到许多通知警报,或者多次调用方法
application:didReceiveLocalNotification:
?我的意思是一次可以看到许多通知警报。您是否通过调用cancelAllLocalNotifications来取消所有以前计划的警报
?谢谢-您知道是否有方法可以复制它们,以使值不完全相同相同?为什么不创建一个新实例?据我所知,要制作深度复制,必须实现该对象的copyWithZone:,这在UILocalNotification类中不是一个解决方案。