HomeKit - Как обновить значение isReachable аксессуара, когда я возвращаюсь с фона на передний план? - PullRequest
0 голосов
/ 21 ноября 2018

Ситуация: я занимаюсь разработкой приложения, которое управляет аксессуарами HomeKit.Например, я делаю это:

  1. Аксессуар включен, и я вижу его через приложение.Также в режиме переднего плана HMAccessoryDelegate метод:

func accessoryDidUpdateReachability(HMAccessory)

работает нормально, и я могу обрабатывать состояние моего аксессуара.

Я переключаю приложение в фоновый режим.

Я отключаю аксессуар (я имею в виду полное отключение питания), поэтому он должен быть недоступен.

Я переключаю приложение в режим переднего плана, но аксессуар все еще доступен.метод func accessoryDidUpdateReachability(HMAccessory) - не вызывается.значение accessory.isReachable не обновляется.

Пример кода, когда я выхожу на передний план:

func applicationDidBecomeActive(_ application: UIApplication) {  
    if let home = HomeStore.sharedStore.home {  
        for accessory in home.accessories {  
            print(accessory.isReachable) //not updated  
            for service in accessory.services {  
                for characteristic in service.characteristics {  
                    characteristic.readValue { (error) in //updated  
                        if error == nil {  
                            let notification = Notification(name: Notification.Name(rawValue: "UpdatedCharacteristic"))  
                            NotificationCenter.default.post(notification)  
                        }  
                    }  
                }  
            }  
        }  
    }  
}

Вопрос: как обновить isReachable значения аксессуаров, когда я прихожувернуться из фонового режима на передний план?

1 Ответ

0 голосов
/ 15 марта 2019

Вы можете создать функцию в ViewController, которая реализует HMHomeManagerDelegate:

func startHomeManager() {
    manager = HMHomeManager()
    manager.delegate = self

    // do something here
}

и добавить вызов к startHomeManager() в ваш viewDidLoad ().Это обновит ваш объект HMHome.Затем вызовите эту функцию в вашем AppDelegate:

func applicationWillEnterForeground(_ application: UIApplication) {
    viewController.startHomeManager()
    viewController.didRestartHomeManager()
}

Бонус заключается в том, что вы можете позвонить startHomeManager() для получения обновления и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...