首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HomeKit --当我从背景返回到前台时,如何更新附件isReachable值?

HomeKit --当我从背景返回到前台时,如何更新附件isReachable值?
EN

Stack Overflow用户
提问于 2018-11-21 12:28:35
回答 1查看 507关注 0票数 5

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

  1. 附件打开电源,我通过应用程序看到它。同样在前台模式下,HMAccessoryDelegate方法:

func accessoryDidUpdateReachability(HMAccessory)

工作很好,我可以处理我的附件的状态。

  1. 我把应用程序切换到后台模式。
  2. 我关闭附件(我的意思是完全关闭),所以它必须是不可触及的。
  3. 我切换应用程序到前台模式,但附件仍然是可触及的。方法func accessoryDidUpdateReachability(HMAccessory) -不调用。值accessory.isReachable未更新。

当我转到前台时,代码示例:

代码语言:javascript
复制
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值?

EN

回答 1

Stack Overflow用户

发布于 2019-03-15 18:26:12

您可以在ViewController中创建一个实现HMHomeManagerDelegate的函数:

代码语言:javascript
复制
func startHomeManager() {
    manager = HMHomeManager()
    manager.delegate = self

    // do something here
}

并将对startHomeManager()的调用添加到viewDidLoad()中。这将刷新您的HMHome对象。然后在您的AppDelegate中调用这个func:

代码语言:javascript
复制
func applicationWillEnterForeground(_ application: UIApplication) {
    viewController.startHomeManager()
    viewController.didRestartHomeManager()
}

一个额外的好处是,您可以调用startHomeManager()来刷新,等等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53412058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档