在 iOS8 中使用 Home kit 框架设置家庭

Posted

技术标签:

【中文标题】在 iOS8 中使用 Home kit 框架设置家庭【英文标题】:Setting up home using Home kit framework in iOS8 【发布时间】:2014-07-07 09:44:05 【问题描述】:

我想用HMHomeManageraddHomeWithName 创建HMHome

HMHomeManager * myHomeManager;

[myHomeManager addHomeWithName:@"My Home" completionHandler:^(HMHome *home, NSError *error) 


    if (!error) 
        NSLog(@"Created Home : %@",home.name);

     else 

        NSLog(@"Error : %@",[error localizedDescription]);
    
];

当应用程序运行时,我收到以下错误,而不是创建主页

Error : The operation couldn’t be completed. (HMErrorDomain error -70892.).

【问题讨论】:

仅供参考,您可以在 HMErrorDomain 类中找到错误标签。你的是:HMErrorUnconfiguredParameter (-70892)。不知道这是什么意思...您的代码没有在myHomeManager 上显示alloc]init]... HMHomeManager * myHomeManager = [HMHomeManager alloc]init];即使我已将其包含在我的应用程序中,我也会收到错误消息。 如果您@user3400046 同意以下答案,建议您接受该答案。 【参考方案1】:

让你的班级成为 HMHomeManager 代表:

import UIKit
import HomeKit

class HomeManagerViewController: UITableViewController, HMHomeManagerDelegate 

    var homeViewController: HomeViewController? = nil
    var myHomeManager:HMHomeManager? = nil

    var homes = [AnyObject]()   // datasource for tableview

你的 HMHomeManager 必须首先被初始化(你已经提到你已经这样做了),并且你的类设置为它的委托。

override func viewDidLoad() 
    super.viewDidLoad()

    myHomeManager = HMHomeManager()
    myHomeManager!.delegate = self

您可以在任何您想要的功能中添加主页(即当用户点击“+”按钮将新主页插入到 tableview 列表中时)

HMHomeManager 必须有时间连接到 homekit 数据库

func insertNewObject(sender: AnyObject)

    myHomeManager!.addHomeWithName( uniqueHomeName , completionHandler:  (home: HMHome!, error: NSError!) -> Void in

        if (error != nil)
        
            // adding the home failed; check error for why
            NSLog("Error : %@",[error.localizedDescription])
        
        else
        
            // success!

            // Insert home at bottom of datasource array and bottom of tableview cells
            self.homes.append(home)

            let indexPath = NSIndexPath(forRow: self.homes.count-1, inSection: 0)
            self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
        
    )

然后您在 homeManagerDidUpdateHomes 委托方法中更新您的 tableviews 数据源。

当 HMHomeManager 完成初始化时调用此函数,并为您提供一个包含任何先前添加的家庭的数组

    // #pragma mark - HMHomeManager Delegate

func homeManagerDidUpdateHomes(manager: HMHomeManager!) 

    self.homes = manager!.homes

    self.tableView.reloadData()

当应用首次运行时,应该会请求访问其“Accessory Data”。

确保为此点按“确定”。

另外:在您的应用权利下添加“HomeKit”:

    选择您的应用目标。 选择“功能”标签。 将“HomeKit”切换为“开启”。 输入您的开发者 ID 等。

附上示例图片

【讨论】:

功能选项卡中的 HomeKit 设置为“开启”。即使我收到错误而不是创建主页。 添加了插入功能。 HMHomeManager 必须在您尝试使用它来添加新家之前完成初始化。当 homeManagerDidUpdateHomes 被调用时,你就知道初始化完成了 如果这是正确的答案,那么如果您将其标记为正确,那么它将对其他人有所帮助 那将是一个新问题。将此当前问题标记为正确(因为它回答了您的原始问题)并开始一个关于 addAccessory 问题的新问题。

以上是关于在 iOS8 中使用 Home kit 框架设置家庭的主要内容,如果未能解决你的问题,请参考以下文章

最终,为什么选择go-kit

无法使用社交框架在 iOS8 中设置联系人图像

无法在 Swift 中使用网络扩展框架 iOS 8 设置 *** 连接

带有视图的 UIView 过渡和设置框架不再适用于 iOS 8

Sprite Kit 中的顶部屏幕 iAd

iAd 冻结 Sprite Kit 应用