Повторять локальное уведомление каждые 14 дней (две недели)?

В моем приложении я должен установить повторяющиеся UILocalNotification. Я могу установить repeatInterval как ежедневно, еженедельно и т. Д., Выполнив

UILocalNotification *localNotification = [[UILocalNotification alloc] init];
localNotification.repeatInterval = NSDayCalendarUnit; // or any other calendarUnit

Хорошо .. все в порядке, но я должен установить repeatInterval каждые 14 дней. я узнал из этой ссылки, что мы можем использовать только один из интервалов повторения NSCalendarUnit. Таким образом, у вас может быть интервал повторения в одну минуту, один час или один день, но не в пять минут, три часа или 14 дней. Есть идеи об этом ограничении в iOS 5 или новее (эта статья была написана для iOS 4.0)?


person Bharat    schedule 02.08.2013    source источник
comment
Каким образом можно использовать repeatInterval, кроме NSCalendarUnit?   -  person Bharat    schedule 02.08.2013
comment
Почему бы не решить эту проблему, используя календарь с 14-дневной неделей? Похоже, это должно сработать. Затем двухнедельный цикл (7 дней в неделю) превращается в простой еженедельный (14 дней) повторяющийся цикл.   -  person Victor Engel    schedule 14.04.2015


Ответы (3)


Вы можете установить интервал повтора только в календарных единицах. Однако, чтобы получить правильный временной интервал, вам, возможно, придется установить несколько уведомлений.

Если вы, например, хотите получать уведомление каждые 20 минут, вам нужно будет создать 3 уведомления с интервалом в 20 минут с интервалом повторения NSHourCalendarUnit.

Проблема в вашем случае заключается в том, что следующая единица измерения недели - это месяц, но месяц - это не ровно 4 недели.

Чтобы фактически установить уведомление каждые 14 дней, вам нужно будет создать 26 уведомлений с интервалом повторения NSYearCalendarUnit.

person user2123173    schedule 02.08.2013
comment
спасибо за вашу помощь, но еще одно ограничение локального уведомления заключается в том, что мы можем использовать максимум 64 уведомления, и я должен установить повторяющиеся типа ежедневно, еженедельно, 14 дней, ежемесячно и т.д., и здесь есть вероятность, что количество уведомлений может пересечь лимит 64? - person Bharat; 02.08.2013
comment
Максимум - это вопрос, но у вас есть типы календаря на день, неделю и месяц, поэтому для каждого из них потребуется только одно уведомление. Если вы используете еженедельное уведомление, нужно ли вам уведомление за 14 дней? - person user2123173; 02.08.2013
comment
да, заражать мне нужно ежедневно, еженедельно (2 раза в неделю), еженедельно, 14 дней и ежемесячно. - person Bharat; 02.08.2013
comment
Хорошо .. я думаю, что это единственный способ добиться этого, спасибо за вашу помощь - person Bharat; 02.08.2013
comment
Возможно, вы захотите подумать только о планировании, возможно, на месяц вперед, а затем, когда приложение загрузится, проверьте, нужно ли вам планировать еще один месяц вперед. Если пользователь не открывал приложение в течение месяца, он, вероятно, больше не интересуется ... - person user2123173; 02.08.2013
comment
@Bharat, у вас есть ссылка на документацию, где упоминается ограничение на уведомления, пожалуйста? - person James Webster; 30.08.2013
comment
Найдите запуск 64 уведомлений в developer.apple. com / library / ios / documentation / iPhone / Reference / или просмотрите комментарии в blog.mugunthkumar.com/coding/ - person Bharat; 30.08.2013

Вы можете отменить уведомление и установить новую дату срабатывания через 14 дней после обработки уведомления. т.е. когда ваше приложение работает на переднем плане, сделайте это в:

(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification

См. Эту тему SO: Установить repeatInterval в локальном уведомлении

Я пробовал этот способ, и он работает.

person Xiang LI    schedule 30.08.2013
comment
этот обратный вызов не работает, если приложение работает в фоновом режиме и пользователь не закрывает уведомление alertBody - person hariszaman; 07.12.2016

В iOS 10 вы можете использовать UNTimeIntervalNotificationTrigger для повторения уведомления каждые 14 дней.

UNTimeIntervalNotificationTrigger* trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:(14*24*3600) repeats: YES];
NSLog(@"td %@", trigger.nextTriggerDate);

UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:identifier content:content trigger:trigger];

[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
    if (error != nil) {
        NSLog(@"Something went wrong: %@",error);
    } else {
        NSLog(@"Created! --> %@",request);
    }
}];

Надеюсь, это поможет всем, кто ищет эту тему.

person Arnab    schedule 19.05.2017