HomeKit-当我从后台回到前台时,如何更新附件的可达值



情况:我正在开发一个应用程序,用于管理HomeKit配件。例如,我这样做:

  1. 附件已通电,我通过应用程序看到它。同样在前景模式HMAccessoryDelegate方法中:

func accessoryDidUpdateReachability(HMAccessory)

工作正常,我可以处理我的配件的状态。

  1. 我将应用程序切换到后台模式。

  2. 我关闭了配件(我的意思是完全关闭电源(,所以它一定是无法访问的。

  3. 我将应用程序切换到前台模式,但附件仍然可以访问。方法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()进行拉刷新等。

相关内容

  • 没有找到相关文章

最新更新