3

在编写示例代码以了解 HomeKit 的工作原理时,我发现如果我只是使用 .value 属性,则无法获得当前值,例如:

let theValue = serviceCharacteristic.value

相反,我会运行标准的 Apple HomeKit 应用程序,它似乎将所有内容与数据库同步,再次运行我的应用程序,现在我将获得当前值。

只有使用readValue才能真正获取设备特征的当前值吗?

func readValue(completionHandler completion: @escaping (Error?) -> Void)

如果没有,我应该使用什么其他方法?

4

2 回答 2

1

是的,数据库保存了关于特征的相对静态的信息,例如它是否可读或可写,但不保存特征的当前实际值。为此,您需要与附件本身进行通信,并通过 readValue(和 writeValue)来实现。这些由系统执行并与您的线程异步运行,因此您需要一个完成处理程序来在系统完成时接收结果并返回以将它们交付给您的应用程序。

于 2017-04-27T22:37:18.957 回答
0

是的,您必须 readValue 才能与设备通信并让它返回当前值。当您 writeValue 时,它​​应该返回请求是否成功。因此,您无需在更改后再次阅读。

于 2021-04-08T14:53:48.130 回答