未调用 HomeKit accessoryDidUpdateServices
HomeKit accessoryDidUpdateServices not called
在下面的快速测试应用程序中,我尝试使用 accessoryDidUpdateServices() 从 Hue 运动检测器附件接收光照级别更新。但是永远不会调用委托函数。我 运行 在 iPhone 上安装了 iOS 12.1.4。
谁能解释我做错了什么,以及我需要做什么才能正确处理 HMService 更新?
import HomeKit
public class ViewController: UIViewController, HMHomeManagerDelegate, HMAccessoryDelegate {
var manager: HMHomeManager!
public override func viewDidLoad() {
super.viewDidLoad()
manager = HMHomeManager()
manager.delegate = self
}
public func homeManagerDidUpdateHomes(_ manager: HMHomeManager) {
let service = manager.primaryHome!.servicesWithTypes([HMServiceTypeLightSensor])!.first!
service.accessory!.delegate = self
let characteristic = service.characteristics.filter({ [=10=].characteristicType == HMCharacteristicTypeCurrentLightLevel }).first!
Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (timer) in
print("Light level: \(characteristic.value!)")
}
}
public func accessoryDidUpdateServices(_ accessory: HMAccessory) {
print("Service updated: \(accessory.name)")
}
}
我认为您的 viewDidLoad
中缺少一个 addHomes(manager.homes)
,您需要确保创建一个新的家来添加它,然后您可以添加配件并添加到家。
我强烈推荐 RayWenderlich 网站上的这个 HomeKit 教程:https://www.raywenderlich.com/5313-homekit-tutorial-getting-started
问题是我在应该使用 accessory:didUpdateValueFor 的时候使用了 accessoryDidUpdateService。使用后一个函数,代码按预期运行。
在下面的快速测试应用程序中,我尝试使用 accessoryDidUpdateServices() 从 Hue 运动检测器附件接收光照级别更新。但是永远不会调用委托函数。我 运行 在 iPhone 上安装了 iOS 12.1.4。
谁能解释我做错了什么,以及我需要做什么才能正确处理 HMService 更新?
import HomeKit
public class ViewController: UIViewController, HMHomeManagerDelegate, HMAccessoryDelegate {
var manager: HMHomeManager!
public override func viewDidLoad() {
super.viewDidLoad()
manager = HMHomeManager()
manager.delegate = self
}
public func homeManagerDidUpdateHomes(_ manager: HMHomeManager) {
let service = manager.primaryHome!.servicesWithTypes([HMServiceTypeLightSensor])!.first!
service.accessory!.delegate = self
let characteristic = service.characteristics.filter({ [=10=].characteristicType == HMCharacteristicTypeCurrentLightLevel }).first!
Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (timer) in
print("Light level: \(characteristic.value!)")
}
}
public func accessoryDidUpdateServices(_ accessory: HMAccessory) {
print("Service updated: \(accessory.name)")
}
}
我认为您的 viewDidLoad
中缺少一个 addHomes(manager.homes)
,您需要确保创建一个新的家来添加它,然后您可以添加配件并添加到家。
我强烈推荐 RayWenderlich 网站上的这个 HomeKit 教程:https://www.raywenderlich.com/5313-homekit-tutorial-getting-started
问题是我在应该使用 accessory:didUpdateValueFor 的时候使用了 accessoryDidUpdateService。使用后一个函数,代码按预期运行。