Поскольку один HMActionSet не может быть добавлен к HMHome и HMTrigger, как я могу добавить HMActionSet к HMTrigger?

Мой код:

// Create Action Set
[_myHome addActionSetWithName:@"Night" completionHandler:^(HMActionSet *actionSet, NSError *error) {
    if (error) {
        NSLog(@"%@", error);
    }else {
        NSLog(@"Add action set");
    }
}];

// Create Time Trigger
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
dateComponents.second = 5;
HMTimerTrigger *timeTrigger = [[HMTimerTrigger alloc] initWithName:@"Night Trigger" fireDate:[NSDate dateWithTimeIntervalSinceNow:5] timeZone:[NSTimeZone localTimeZone] recurrence:dateComponents recurrenceCalendar:[NSCalendar currentCalendar]];

// Add Action Set to Trigger
for (HMActionSet *actionSet in _myHome.actionSets) {
    if ([actionSet.name isEqualToString:@"Night"]) {
        [timeTrigger addActionSet:actionSet completionHandler:^(NSError *error) {
            if (error) {
                NSLog(@"%@", error);
            }else {
                NSLog(@"Add Action Set to Trigger");
            }
        }];
    }
}

// Add Trigger to My Home
[_myHome addTrigger:timeTrigger completionHandler:^(NSError *error) {
    if (error) {
        NSLog(@"%@", error);
    }else {
        NSLog(@"Add Trigger");
    }
}];

Сначала я добавляю HMActionSet под названием "Ночь" в HMHome. Затем я добавляю тот же HMActionSet в HMTrigger. HomeKit выдает ошибку: Error Domain = HMErrorDomain Code = 12 "Операция не может быть завершена. (HMErrorDomain error 12.)", что означает ObjectAlreadyAssociatedToHome.

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

У кого-нибудь есть решение для этого?

3 ответа

Твоя проблема:

dateComponents.second = 5;

Триггеры таймера устанавливаются только в начале минуты. Секунды не используются, и будет возвращена ошибка, если дата срабатывания включает значение секунд, отличное от 0. Когда срабатывает таймер, он обычно срабатывает в течение 1 минуты после запланированной даты срабатывания или расчетной даты срабатывания, в зависимости от мощности системы и Управление ресурсами.

Согласно Apple Docs

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

HMActionSet может быть добавлен в HMTrigger, если он уже добавлен в дом.

HMActionset - это сцена (которая представляет собой набор доступных для записи характеристик любого аксессуара). Который может быть выполнен с помощью одной команды.

Так что либо можно просто выполнить HMActionSet, либо его можно добавить в Trigger для выполнения этой сцены в определенные моменты времени.

Должно быть два разных представления для обработки HMActionSet (Добавить, переименовать, удалить, изменить значения характеристики).

И для триггеров. Он создаст триггер и "назначит" набор HMActionSet из того же дома этому триггеру.

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

Другие вопросы по тегам