1

我在使用 HMHomeManager 添加房屋时遇到问题。我可以add很好地调用该函数,但 HMHomeManager 不返回

func homeManager(manager: HMHomeManager!, didAddHome home: HMHome!) {
    println("\(__FUNCTION__)")
}

我确定我已经分配了 homeManager 的代表。下面是我的代码:

class ViewController: UIViewController, HMHomeManagerDelegate {
var manager: HMHomeManager

required init(coder aDecoder: NSCoder) {
    manager = HMHomeManager()
    super.init(coder: aDecoder)
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    manager.delegate = self
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

// MARK: - Actions

@IBAction func home1Pressed(sender: UIButton) {
    manager.addHomeWithName("Home12", completionHandler: {
        (home:HMHome!, error:NSError!) -> Void in
        if error != nil {
            println("error: \(error)")
        }
        else {
            println("no error")
        }
    })
}

@IBAction func home2Pressed(sender: UIButton) {
    manager.addHomeWithName("Home23", completionHandler: {
        (home:HMHome!, error:NSError!) -> Void in
        if error != nil {
            println("error: \(error)")
        }
        else {
            println("no error")
        }
    })
}

// MARK: - HMHomeManagerDelegate

func homeManagerDidUpdateHomes(manager: HMHomeManager!) {
    println("\(__FUNCTION__)")
}

func homeManagerDidUpdatePrimaryHome(manager: HMHomeManager!) {
    println("\(__FUNCTION__)")
}

func homeManager(manager: HMHomeManager!, didAddHome home: HMHome!) {
    println("\(__FUNCTION__)")
}

func homeManager(manager: HMHomeManager!, didRemoveHome home: HMHome!) {
    println("\(__FUNCTION__)")
}

}

请注意:当我第一次运行此代码时,homeManagerDidUpdateHomes调用它向我证明 homeManager.delegate=self 是正确的

在这段代码中,在我按下 button1(home1Pressed触发)和 button2(home1Pressed触发)之后,home12并被home23创建。我知道这一点,因为下次我运行此代码时,输​​出为:

homeManagerDidUpdateHomes
homes: [[ name = Home1, primary : Yes ], [ name = Home12, primary : No ], [ name = Home23, primary : No ]]

但是为什么homeManager(manager: HMHomeManager!, didAddHome home: HMHome!当我按下button1和button2时没有调用?想不通,2天。

谢谢,

4

4 回答 4

2

你还记得在 Capabilities 中启用 HomeKit 吗?

在此处输入图像描述

于 2014-12-01T22:25:20.963 回答
2

引用 Apple Dev Forum 讨论:

这不是一个错误,但是是的,它应该有更好的文档记录。

只有当 HomeKit 数据库中发生不是由应用程序引起的更改或与您的完成处理程序没有直接连接时,才会调用所有 HomeKit 的代理(例如从 iCloud 同步,另一个 HomeKit 应用程序添加了一个房间,然后用户切换到您的应用程序)

于 2015-05-28T05:52:58.050 回答
0

我犯了同样的错误。作为一种解决方法,我得到了 homeManagerDidUpdatePrimaryHome 回调。我在测试期间为此提交了一个错误,该错误已作为副本关闭,但我想它需要重新提交。homeManagerDidUpdatePrimaryHome 正在工作,但这真的只对第一个家有帮助。

我将此事重新报告给了 Apple。

于 2014-11-19T21:01:03.080 回答
0

这是一个 iOS 错误(用 8.3 测试)。

21097472 HomeKit API - HMHomeManagerDelegate didAddHome 未被调用

于 2015-05-25T19:27:30.280 回答