HomeKit附件模拟器作为一个小小的按钮,可以让设备不公平。
鉴于它是一个附件模拟器,我认为有一些硬件编程规范允许编写一个不配对的功能。
但是,将此实现作为 HomeKit框架的一部分也是有意义的,并允许客户端开发人员通过 HomesController 类(和派生)来实现。< / p>
- &GT;简短版本:
HMService 或 HMCharacteristic 或HomeKit框架中是否有任何方法可以取消家中的特征/服务?
答案 0 :(得分:1)
服务或特征不能取消配对,实际上不需要这样做 人们可以从家里取消配件。
您可以调用HMHome类的方法来删除/取消配对。
- (void)removeAccessory:(HMAccessory *)accessory
completionHandler:(void (^)(NSError *error))completion;
重置。
答案 1 :(得分:0)
取消配对相当于基本上从HomeKit家(HMHome)下移除该配件。这可以通过使用HMHome下的api调用来实现(可以通过视图控制器中的按钮点击来触发):
示例代码:
[yourHMHome removeAccessory:accessory_ completionHandler:^(NSError *error) {
if (error) {
//Handle your error here.
} else {
//Removing, or here, un-pairing was successful, do anything else
//Example
[[YourExampleHomeStore sharedStore] updateAccessoryDelegates];
YourCompletionHandler(error);
}
}];
这回答了关于解除配对的问题。 HMService和HMCharacteristic在概念上是不同的。如果您想更新(可写)HMC特性的值,那么您将在可用的HMServices中搜索该HMC特性。请记住,附件中可用的HMServices和HMC特性将根据其配对状态完全不同。大多数读取或写入和“配对读取”和“配对写入”,当处于未配对状态时,您只能阅读“附件信息服务”(名称,型号等)。
现在,假设您想要读取或更改(写入)HMC特性的值,让我们说这是序列号,步骤如下:
序列号的示例代码可能是这样的:
注意:如果附件无法访问,则返回空字符串。
+(NSString *)getSerialNumberFromHMAccessory:(HMAccessory *)accessory
{
if (!accessory || !accessory.reachable) { return @""; }
for (HMService *service in accessory.services) {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@", @"characteristicType", HMCharacteristicTypeSerialNumber];
NSArray *result = [service.characteristics filteredArrayUsingPredicate:predicate];
if (result && [result count] > 0 && [result[0] isKindOfClass:[HMCharacteristic class]]) {
HMCharacteristic *serialNumChar = (HMCharacteristic *)result[0];
NSString *serialNum = [serialNumChar valueForKey:@"value"];
if (serialNum && [serialNum length] > 0) {
NSLog(@"Found serial number: %@ for accessory named \"%@\"", serialNum, accessory.name);
return serialNum;
}
}
}
return @"";
}
无论如何,可能会花费太多时间并且从主要问题中脱离出来。希望这可以帮助你。欢呼声。