未调用 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。使用后一个函数,代码按预期运行。