Подтвердить что ты не робот

Повторить HMTimerTrigger В течение нескольких дней (например: каждый понедельник, среда..., как в приложении iOS 10 Home)

Я проверил приложение iOS 10 Home. Снимок экрана снимается только с основного приложения.

введите описание изображения здесь За последние два дня я пытался реализовать функция повторения HMTimerTrigger. Мое требование - я должен повторять Триггер каждый понедельник, вторник и пятницу. Я нашел, что я могу добавить только один день (понедельник или вторник... но не понедельник и вторник), как показано ниже.

  unsigned flags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitWeekOfYear | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute;
  NSDate *fireDate = [NSDate date];
  NSDateComponents *recurrenceComponents = [[NSDateComponents alloc] init];
  recurrenceComponents.weekday = 2; // For monday

  NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:flags fromDate:fireDate];
  fireDate = [[NSCalendar currentCalendar] dateFromComponents:dateComponents];

  HMTimerTrigger *trigger = [[HMTimerTrigger alloc] initWithName:triggerName.text
                                                          fireDate:fireDate
                                                          timeZone:nil
                                                        recurrence:recurrenceComponents
                                                recurrenceCalendar:[NSCalendar currentCalendar]];

Спасибо, что прочитал мой пост. Любые идеи/предложения были бы очень полезными.

4b9b3361

Ответ 1

Эта функция недоступна для публики, хотя Apple имеет ее в своем приложении HomeKit. Лучшее, что вы можете сделать, это создать несколько триггеров за каждый день, но тогда пользователь будет запутаться.

Откройте здесь радарную ошибку здесь

Ответ 2

Несколько лет назад я сделал то же самое, используя уведомление. Вы не можете создать несколько триггеров с одним экземпляром. Поэтому вы должны создать его для каждого дня. Я надеюсь, что этот пример может дать вам некоторую идею.

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar] ;
NSDateComponents *componentsForReferenceDate = [calendar components:(NSYearCalendarUnit | NSWeekCalendarUnit |  NSHourCalendarUnit | NSMinuteCalendarUnit| NSSecondCalendarUnit | NSWeekdayCalendarUnit) fromDate:[NSDate date]];
NSDate *referenceDate = [calendar dateFromComponents:componentsForReferenceDate] ;
NSDateComponents *componentsForFireDate = [calendar components:(NSYearCalendarUnit | NSWeekCalendarUnit |  NSHourCalendarUnit | NSMinuteCalendarUnit| NSSecondCalendarUnit | NSWeekdayCalendarUnit) fromDate: referenceDate];

NSArray *arrayDays = [NSArray arrayWithObjects:@"1",@"3",@"5", nil];
for (int i=0; i<[arrayDays count]; i++)
{
    // set components for time 2:00 p.m.
    [componentsForFireDate setWeekday:[[arrayDays objectAtIndex:i] intValue]];
    [componentsForFireDate setHour: 14];
    [componentsForFireDate setMinute:0];
    [componentsForFireDate setSecond:0];
    NSDate *firstDateOfNotification = [calendar dateFromComponents: componentsForFireDate];

    UILocalNotification *notification1 = [[UILocalNotification alloc]  init] ;
    notification1.fireDate = firstDateOfNotification;
    notification1.timeZone = [NSTimeZone localTimeZone] ;
    notification1.alertBody = [NSString stringWithFormat: @"Complete your daily survey"] ;
    notification1.alertAction = @"go back";
    notification1.repeatInterval= NSWeekCalendarUnit;
    notification1.soundName = UILocalNotificationDefaultSoundName;
    [[UIApplication sharedApplication] scheduleLocalNotification:notification1] ;
}