У меня есть одна идея, как это сделать, я реализовал это в своем проекте
Сначала создайте локальное уведомление с датой запуска (например, каждую минуту).Следующий шаг - заполните информацию о пользователе уникальным идентификатором для этого уведомления (если вы хотите удалить его в будущем) и свой пользовательский период, например:
-(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
Не звонил, когда ты на заднем плане.Итак, вы должны настроить длительное фоновое задание, где вы снова создадите уведомление.