情况:我正在开发一个应用程序,用于管理HomeKit配件。例如,我这样做:
- 附件已通电,我通过应用程序看到它。同样在前景模式
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值?
您可以在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()
进行拉刷新等。