2016-08-12 6 views
13

iOS 10 Home 앱을 확인했습니다. 스크린 샷은 홈 앱에서만 캡처됩니다.반복 HMTimerTrigger 여러 날 (예 : 매주 월요일, 수요일, iOS 10 Home 앱처럼)

enter image description here 지난 2 일 이후로 나는 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]]; 

내 게시물을 읽어 주셔서 감사합니다. 어떤 아이디어/제안이라도 도움이 될 것입니다.

+0

하나의'HMTimerTrigger' 인스턴스에서 여러 날을 구성 할 수는 없지만. 다른 날에 트리거를 기반으로 여러 HMTimerTrigger를 사용할 수 있습니다. 이 경우,'HMHome'은 addTrigger 메소드를 가지고있어 여러개의 트리거를 추가 할 수 있습니다. 귀하의 경우에는 각각의 날에 대해 별도로'HMTimerTrigger'를 생성하여'HMHome' 인스턴스에 추가해야합니다. 귀하의 예에서는 월요일에 한 번, 화요일에 한 번, 금요일에 한 번씩 세 번씩 트리거를 추가해야합니다. – Ravin

+0

안녕하세요 @ 레이븐 당신 말이 맞습니다. 그러나 문제는 우리가 모든 트리거를 보여주고 있다는 것입니다. 이 경우 사용자는 혼란 스러울 수 있습니다. 그래서 이것이 내가 HomeKit 프레임 워크 메서드를 찾고있는 이유입니다. – SRI

+0

이것은 공개 API에 설명되어 있지 않지만 기술 지원 (기술 지원 사건)을 확인하고이를 수행 할 공식 방법이 있는지 확인할 수 있습니다. 하나의 개발자 계정에서 두 개의 TSI를 사용할 수 있습니다. (https://developer.apple.com/support/technical/) 공식적으로 지원되지 않는 경우 TriggerGroup과 같은 코드를 작성하여 트리거를 생성하는 동안 전달한 이름입니다. 이렇게하면 명확한 UI를 제공하는 데 도움이 될 수 있습니다. – Ravin

답변

4

이 기능은 Apple이 자신의 HomeKit 앱에 있음에도 불구하고 대중에게 공개되지 않습니다. 사용자가 할 수있는 최선의 방법은 매일 여러 트리거를 만드는 것이지만 사용자가 혼란 스러울 수 있습니다.

다시 내가 알림을 사용하여 같은 일을 해냈어 here

-1

몇 년에 레이더 버그를 열어주십시오. 한 인스턴스로 여러 트리거를 작성할 수 없습니다. 그래서 매일 만들어야합니다. 이 예제가 당신에게 어떤 아이디어를 줄 수 있기를 바랍니다.

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] ; 
} 
+0

이것은 HomeKit과 관련이 있지만 알림에 대한 응답을 제공했습니다. 두 개념이 다르다. – SRI