由于一个 HMActionSet 不能同时添加到 HMHome 和 HMTrigger,我如何将 HMActionSet 添加到 HMTrigger?

Posted

技术标签:

【中文标题】由于一个 HMActionSet 不能同时添加到 HMHome 和 HMTrigger,我如何将 HMActionSet 添加到 HMTrigger?【英文标题】:Since one HMActionSet can not be added to both HMHome and HMTrigger, how can I add a HMActionSet to HMTrigger? 【发布时间】:2014-09-30 09:30:20 【问题描述】:

我的代码是:

// 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");
    
];

首先,我将一个名为“Night”的 HMActionSet 添加到 HMHome。然后我将相同的 HMActionSet 添加到 HMTrigger。 HomeKit 抛出错误:Error Domain=HMErrorDomain Code=12 "The operation could not be completed. (HMErrorDomain error 12.)" 意思是 ObjectAlreadyAssociatedToHome

我的猜测是您不能将相同的 HMActionSet 添加到 HMHome 和 HMTrigger。所以我尝试创建一个 HMActionSet 并将其添加到 HMTrigger,然后将 HMTrigger 添加到 HMHome。但是我在创建 HMActionSet 时遇到了问题,因为它无法启动。

有人对此有解决方案吗?

【问题讨论】:

【参考方案1】:

你的问题:

dateComponents.second = 5;

定时器触发器只设置在一分钟的开始。 不使用秒,如果触发日期包含 0 以外的秒值,则会返回错误。 当计时器触发时,它通常会在预定触发日期或计算出的重复触发的 1 分钟内触发日期,取决于系统电源和资源管理。

According to Apple Docs

【讨论】:

【参考方案2】:

您应该在成功添加操作集后调用添加触发器,这意味着在完成处理程序中。

【讨论】:

另外,note-firedate 必须四舍五入秒。根据苹果文档:计时器触发器仅在一分钟开始时设置。不使用秒数,如果触发日期包含 0 以外的秒值,则会返回错误。当计时器触发时,它通常会在预定触发日期或计算出的重复触发日期的 1 分钟内触发,具体取决于系统电源和资源管理。【参考方案3】:

如果 HMActionSet 已经添加到主页,则可以将其添加到 HMTrigger。

HMActionset 是一个场景(它是任何附件的可写特征的集合)。 可以通过单个命令执行。

所以任何一个都可以只执行 HMActionSet 或者它可以添加到 Trigger 在特定时间执行该场景。

应该有两个不同的视图来处理 HMActionSet(添加、重命名、删除、更改特征值)。

对于触发器,它将创建一个触发器并将 HMActionSet 从同一家“分配”给该触发器。

但是,您需要管理重复、触发和启用属性才能完美触发。

【讨论】:

以上是关于由于一个 HMActionSet 不能同时添加到 HMHome 和 HMTrigger,我如何将 HMActionSet 添加到 HMTrigger?的主要内容,如果未能解决你的问题,请参考以下文章

华为手机可以同时连接两副蓝牙耳机吗?

不能同时为同一个键添加多个值

ArcEngine 添加多个要素为啥不能同时显示

在JS脚本中,多个setInterval之间会出现干扰!大概原因是由于从上到下的执行顺序,导致不能同时执行!

将 EF Core 迁移添加到现有数据库,同时仍允许从头开始创建数据库

不能同时添加子对象和父对象