编辑:我收到以下错误代码:
添加附件时出错无法完成操作。 (HMErrorDomain错误2。)
和
添加附件时出错无法开始与附件配对[name = xxxxx,providedName = xxxxx,uuid = xxxxx-xxxxx-xxxxx-xxxxx-xxxxx,identifier = xxxxx,configuration-app-id =(null),home = (null),bridge =(null)]
两者都是2号。
我不明白是HMCatalog应用程序的原因。我的代码出了什么问题? 它在附件模拟器上工作正常,但在真正的附件上却不行(真正的附件仅通过HMCatalog应用程序添加,但不是我的自定义应用程序)。
实际行为:
有时候:
预期结果:
这是我的添加附件代码:
[self.home addAccessory:self.accessory completionHandler:^(NSError *error) {
NSLog(@"in adding for accessory %@", self.accessory.name);
if (error) {
NSLog(@"Error adding accessory %@ %li", error.localizedDescription, (long)error.code);
UIAlertController *alertController = [UIAlertController
alertControllerWithTitle:@"Pairing error"
message:error.localizedDescription
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *okAction = [UIAlertAction
actionWithTitle:NSLocalizedString(@"OK", @"OK action")
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action)
{
NSLog(@"OK action");
}];
[alertController addAction:okAction];
[self presentViewController:alertController animated:YES completion:nil];
}
else{
// TODO: Tweak this
NSLog(@"Added to home");
[self dismiss:nil];
/**
[homeSweetHome assignAccessory:accessory toRoom:nil completionHandler:^(NSError *error) {
if (error) {
NSLog(@"Failed adding accessory %@ to room %@", accessory.name, room.name);
}
}];**/
}
}];
答案 0 :(得分:2)
告诉浏览器开始搜索后,当前可用的任何附件都将传递给这些方法。
找不到HMErrorCode 2(参见apple docs)。这意味着您拥有的附件指针不再有效。这可能是因为抓住配件对象然后告诉配件浏览器开始寻找配件。如果在添加附件之前取消分配浏览器,也可能发生这种情况。
在尝试将附件添加到家中之前,请确保为HMAccessoryBrowser获取新的HMAccessory。如果您可以分享更多代码,以显示您添加的HMA配件的来源,我可能会提供更多帮助。
答案 1 :(得分:2)
经过5次不同的组合和几个小时的测试,以下是我的发现 -
我在连续行的viewDidLoad中有这个,并且100%没有时间工作
self.accessoryBrowser = [HMAccessoryBrowser alloc] init];
[self.accessoryBrowser startSearchingForNewAccessories];
E.g。如果在视图控制器中使用它,那么视图控制器代码应该看起来像 -
-(instanceType)init{
if(self = [super init]){
self.accessoryBrowser = [HMAccessoryBrowser alloc] init]; }
}
-(void)viewDidLoad{
[self.accessoryBrowser startSearching];
}
所以我认为你应该在之前初始化HMAccessoryBrowser
。
HMAccessoryBrowser的实例应该处于活动状态,直到家中附件的添加完成为止。
在向家中添加附件之前,请勿致电stopSearchingForNewAccessories
。
所以谈论#2和#3
startSearchingForNewAccessories
后找到该设备,然后就此致电[self.home addAccessory: completion:]
。在您成功完成此操作之前,请勿调用stopSearchingForNewAccessories
并保持HMAcccessoryBrowser实例处于活动状态。
我正在寻找我的homekit配件,发现它我会停止搜索,然后尝试将附件添加到我家。我几乎每次都会得到ErrorCode 2。一旦我停止致电stopSearching
,我看到了更好的结果
discoveredAccessories
数组中的对象引用。相反,我建议使用从委托回调 - (void)accessoryBrowser:(HMAccessoryBrowser *)browser didFindNewAccessory:(HMAccessory *)accessory