首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HMAccessoryDelegates不调用按钮操作

HMAccessoryDelegates不调用按钮操作
EN

Stack Overflow用户
提问于 2015-06-18 07:57:22
回答 1查看 206关注 0票数 0

我正在开发Homekit iOS应用程序。我有一个问题,即我有一个附件,当我使用HomeKit模拟器更改它的功率特征值时,HMAccessory的委托是杯形的,但是如果我以编程方式(使用写值)更改powr特征值,则不会调用委托方法。请告诉我有什么建议。

代码语言:javascript
复制
Code 

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

HMAccessoryDelegate

代码语言:javascript
复制
- (void)accessory:(HMAccessory *)accessory service:(HMService *)service didUpdateValueForCharacteristic:(HMCharacteristic *)characteristic;
{
    NSLog(@"changed");
}

写函数

代码语言:javascript
复制
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];
                }
            }];

        }
}

如果我不清楚,请告诉我

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-18 09:11:24

文档表示,当您以编程方式设置值时,不会调用委托方法:

此方法是由于附件启动的值更改而调用的。由应用程序启动的编程更改不会导致调用此方法。

如果您想在写入特性的值成功(或失败)之后执行某些操作,可以在completionHandler:块的writeValue:completionHandler:方法中完成。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30909612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档