Как я могу пропустить первое появление повторяющегося триггера UNCalendarNotificationTrigger?

Скажем, сегодня понедельник и сейчас 13:00. Я хочу запланировать еженедельное локальное уведомление из моего приложения iOS, начиная с сегодняшнего дня в 14:00. я бы сделал так:

NSDateComponents *components = [[[NSDateComponents alloc]init]autorelease];
components.weekday = 2;
components.hour = 14;
components.minute = 0;

UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components repeats:YES];
//then make a UNMutableNotificationContent and UNNotificationRequest and schedule it

Но если я хочу начать его в следующий понедельник в 14:00, как мне пропустить первое вхождение?

Чтобы задать вопрос по-другому, как мне запланировать повторение UNCalendarNotificationTrigger, начинающееся в произвольное время, вместо первого появления интервала повторения?


person Tom Hamming    schedule 03.01.2017    source источник
comment
Поскольку NSDateComponents не поддерживает NSDate (в том смысле, что он не знает о конкретной дате, только день/время относительно начала определенного компонента, например, год, день или час), я не думаю, что это возможно.   -  person brandonscript    schedule 03.01.2017
comment
Единственный способ взломать это, который я мог придумать, - это создать фоновую функцию на таймере, которая выполняет создание триггера уведомления после начального появления 2PM в понедельник.   -  person brandonscript    schedule 03.01.2017
comment
@brandonscript это немного ужасно. Я также мог бы просто не планировать это и надеяться, что они снова откроют приложение до того, как наступит следующая неделя...   -  person Tom Hamming    schedule 03.01.2017
comment
Да, это грубый взлом. Не делай этого, лол! Я бы сказал, просто оставьте это и не беспокойтесь об этом. Я подозреваю, что пользователи iOS привыкли к такому поведению (уверен). Вероятность того, что вы захотите получить повторное напоминание, начиная с следующей недели, и не захотите отклонить лишнее, невелика.   -  person brandonscript    schedule 03.01.2017
comment
@brandonscript, конечно, это не так уж и важно. Контекст напоминает пользователям о выполнении ежедневной задачи, но не напоминает сегодня, если они уже сделали это сегодня. Функция уже отправлена ​​и ведет себя таким образом — теперь я обновляюсь до новых API. Я зарегистрирую радар, если ничего больше.   -  person Tom Hamming    schedule 03.01.2017
comment
Можете ли вы создать уведомление только каждые 7 дней с днем ​​​​начала? (не еженедельно, просто повторяйте каждые 7 дней)   -  person NSDmitry    schedule 06.01.2017
comment
@NSDmitry Я не знаю, как повторять каждые n дней / недель, где n › 1 ... можете ли вы предоставить подробности?   -  person Tom Hamming    schedule 06.01.2017
comment
@TomHamming Попробуйте использовать - (NSDateComponents *)components:(NSCalendarUnit)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSCalendarOptions)opts один раз для создания компонентов даты.   -  person KrishnaCA    schedule 07.01.2017
comment
@KrishnaCA, можете ли вы уточнить / сделать это ответом?   -  person Tom Hamming    schedule 10.01.2017
comment
@TomHamming, этот подход не работает так, как мы хотим. Лучше всего сделать это через UILocalNotification   -  person KrishnaCA    schedule 11.01.2017
comment
@TomHamming, ты нашел способ решить эту проблему?   -  person yongfong zhang    schedule 26.05.2018
comment
Я спрашивал об этом в лабораториях WWDC 2018, и это невозможно с текущим API. Но они сказали, что просить об этом разумно, и это может появиться в будущем обновлении.   -  person Tom Hamming    schedule 11.06.2018
comment
Я также спрашивал об этом на WWDC 2018, они отметили и сказали, что не сообщают никаких сроков, когда это будет доступно в будущем обновлении!   -  person Hiren Gujarati    schedule 30.06.2018
comment
Это было бы легко возможно с сегодняшним API, если бы подкласс UNCalendarNotificationTrigger не приводил к сбою добавления уведомления. Просто переопределите nextTriggerDate. Никаких изменений в API не требуется.   -  person Nailer    schedule 16.11.2018
comment
Вы нашли решение?   -  person Michael    schedule 19.07.2019
comment
@Майкл, никаких новостей. Я не видел никаких новых API для этого в iOS 13, хотя я не смотрел никаких связанных сессий WWDC 2019.   -  person Tom Hamming    schedule 19.07.2019
comment
Есть новости по этим?   -  person Przemex3000    schedule 11.08.2020