HMHomeManager didAddHome没有返回

时间:2014-11-12 06:44:17

标签: ios8 protocols homekit

我在使用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已触发)之后,创建了home12home23。我知道这是因为下次运行此代码时,输​​出为:

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

但是当我按下button1和button2时,为什么没有调用homeManager(manager: HMHomeManager!, didAddHome home: HMHome!?我无法弄明白,持续2天。

谢谢,

4 个答案:

答案 0 :(得分:2)

你还记得在功能中启用HomeKit吗?

enter image description here

答案 1 :(得分:2)

引用Apple Dev论坛讨论:

这不是一个错误,但是,应该更好地记录。

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

答案 2 :(得分:0)

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

我向Apple重新报告了此事。

答案 3 :(得分:0)

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

21097472 HomeKit API - 未调用HMHomeManagerDelegate didAddHome