首页 > 解决方案 > 未调用 HomeKit 附件DidUpdateServices

问题描述

在以下快速而肮脏的测试应用程序中,我正在尝试使用 accessoryDidUpdateServices() 从 Hue 运动检测器配件接收光照级别更新。然而,委托函数永远不会被调用。我在安装了 iOS 12.1.4 的 iPhone 上运行它。

谁能解释我做错了什么,以及我需要做什么才能正确处理 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({ $0.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)")
    }
}

标签: swifthomekit

解决方案


addHomes(manager.homes)我认为您的内部缺少一个viewDidLoad,您需要确保创建一个新家来添加它,然后您可以添加配件并添加到家中。

我强烈推荐 RayWenderlich 网站上的这个 HomeKit 教程:https ://www.raywenderlich.com/5313-homekit-tutorial-getting-started


推荐阅读