3 回答
TA贡献1820条经验 获得超10个赞
得到了答案,它是尽可能直接的。
您无法创建自定义重复间隔。
您必须使用NSCalendarUnit的内置单位时间间隔。
我尝试了上述所有解决方案,甚至尝试了其他方法,但是它们都不起作用。
我花了很多时间来发现没有办法让它在自定义时间间隔内工作。
TA贡献1788条经验 获得超4个赞
我有一个想法如何做到这一点,我已经在我的项目中实现了
首先,使用火灾日期(例如,每分钟)创建本地通知。下一步-使用此通知的唯一ID(如果您以后希望删除它)和您的自定义期限来填充用户信息:
-(void) createLocalRepeatedNotificationWithId: (NSString*) Id
{
UILocalNotification *localNotification = [[UILocalNotification alloc] init];
NSTimeInterval your_custom_fire_interval = 60; // interval in seconds
NSDate *remindDate = [[NSDate date] dateByAddingTimeInterval:your_custom_fire_interval];
localNotification.fireDate = remindDate;
localNotification.userInfo = @{@"uid":Id, @"period": [NSNumber numberWithInteger:your_custom_fire_interval]};
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
}
之后,-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification在您的AppDelegate中实施:
从用户信息中获取您的自定义期间。
更改下一个时期的开火日期
只需再次将其添加到隐藏的通知中即可!
NSInteger period = [[notification.userInfo objectForKey:@"period"] integerValue]; //1
NSTimeInterval t= 10 * period;
notification.fireDate =[[NSDate date] dateByAddingTimeInterval:t]; //2
[[UIApplication sharedApplication] scheduleLocalNotification:notification]; //3
如果您要删除此通知,请执行
UIApplication *app = [UIApplication sharedApplication];
NSArray *eventArray = [app scheduledLocalNotifications];
for (int i=0; i<[eventArray count]; i++)
{
UILocalNotification* oneEvent = [eventArray objectAtIndex:i];
NSDictionary *userInfoCurrent = oneEvent.userInfo;
NSString *uid=[NSString stringWithFormat:@"%@",[userInfoCurrent valueForKey:@"id"]];
if ([uid isEqualToString:notification_id_to_remove])
{
//Cancelling local notification
[app cancelLocalNotification:oneEvent];
break;
}
}
很重要!
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification当您处于后台时,请勿调用。因此,您必须设置长时间运行的后台任务,在该任务中您将再次创建通知。
- 3 回答
- 0 关注
- 699 浏览
添加回答
举报