ios - HMAccessoryDe​​legates 未调用按钮操作

标签 ios objective-c homekit ios-homekit

我正在开发 Homekit iOS 应用程序。我有一个问题,我有一个附件,当我使用 HomeKit 模拟器更改其功率特性值时,HMAccessory 的代表正在调用,但如果我以编程方式更改功率特性值(使用 writevalue ),则不会调用委托(delegate)方法.请让我知道任何想法和建议。

Code 

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    selectedDevice.delegate = self;
}

HMAccessoryDe​​legate

- (void)accessory:(HMAccessory *)accessory service:(HMService *)service didUpdateValueForCharacteristic:(HMCharacteristic *)characteristic;
{
    NSLog(@"changed");
}

写函数

UISwitch *sw = [[UISwitch alloc] initWithFrame:CGRectMake(230, 5, 51, 31)];
[cell addSubview:sw];
sw.on = YES;
[sw addTarget:self action:@selector(updateState:) forControlEvents:UIControlEventValueChanged];

-(void)updateState:(UISwitch*)sender
{
HMCharacteristic *characteristic = self.selectedService.characteristics[tag];

[characteristic enableNotification:YES completionHandler:^(NSError *error)
             {
                 if(!error)
                 {

                 }
             }];
 if([characteristic.characteristicType isEqualToString:HMCharacteristicTypePowerState])
        {
        id val = characteristic.value;
        NSString *str = [NSString stringWithFormat:@"%@",val];

        if([str isEqualToString:@"0"])
        {
            id a = characteristic.value;

            BOOL b = [a boolValue];

            NSNumber *c = [NSNumber numberWithBool:!b];

            AppDelegate *appDel = [[UIApplication sharedApplication] delegate];

            [characteristic writeValue:c completionHandler:^(NSError *error) {
                if (error) {
                    UIAlertView *alertController = [[UIAlertView alloc] initWithTitle:@"Error" message:[appDel handleErrorCodes:error.code] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
                    [alertController show];
                    return;
                }
                else
                {
                    [serviceCharacteristicsTableView reloadData];
                }
            }];

        }
}

如果我不清楚请告诉我

最佳答案

documentation表示当您以编程方式设置值时不会调用委托(delegate)方法:

This method is called as a result of a change in value initiated by the accessory. Programmatic changes initiated by the app do not result in this method being called.

如果你想在写入特性值成功(或失败)后做一些事情,你可以在writeValue:completionHandler: 方法的completionHandler: block 中进行。

关于ios - HMAccessoryDe​​legates 未调用按钮操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30909612/

相关文章:

ios - 仅在 iOs 上,嵌套的固定元素不能大于父元素

ios - 如何在 UIScrollview 中重新排列和删除 UIView,就像在 iOS 主屏幕中重新排列应用程序一样

ios - 错误 : implementing a method which will also be implemented by its primary class

ios - MKMapSnapshotter 如何设置pin Image

ios - HomeKit: "Error adding accessory The operation couldn’ t 完成“和 "Error adding accessory The operation couldn’ t 完成”

ios - 如何更改 MS TabBarViewController 中选项卡的颜色?

ios - 有没有办法检查 iOS 设备是否已锁定/解锁?

iphone - 带有图像的自定义 UISwitch

ios - HomeKit 模拟器 : Adding human readable description to custom service characteristic