取消配对基本上相当于从 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 在概念上是不同的。如果您想更新(可写的)HMCharacteristic 的值,那么您将在可用的 HMServices 中搜索该 HMCharacteristic。请记住,配件上可用的 HMServices 和因此 HMCharacteristics 将根据其配对状态而完全不同。大多数读写和'paired-read'和'paired-write',当处于未配对状态时,你只能读取'accessory information service'(名称、型号等)
现在,假设您要读取或更改(写入)HMCharacteristic 的值,假设它是序列号,步骤如下:
- 获取相关的 HMCharacteristic
序列号的示例代码可能是这样的:
注意:如果附件无法访问,则返回空字符串。
+(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 @"";
}
- 找到所需的 HMCharacteristic 后,您可以调用 HomeKit api 来增加您的兴趣(例如更新值等)。在这里,由于序列号是不可写的,您只需阅读它就可以了。
无论如何,可能是咆哮了太久,偏离了主要问题。希望这对你有所帮助。干杯。