从教程制作简单的HomeKit应用程序并获取附加HMAccessory的错误

时间:2017-03-20 00:03:14

标签: ios swift swift3 homekit

我正在学习本教程:
http://www.xmcgraw.com/learn-how-to-create-an-ios-app-using-homekit/
文章中有一个链接到GitHub,其中包含代码。

我正在尝试启动并运行一个简单的HomeKit应用程序来打开和关闭灯光。我已经阅读了Apple的HomeKit入门指南。我有一个付费的Apple开发者会员资格,配置文件允许我构建应用程序并在我的iPhone上运行它(6秒与iOS 10.2)。我正在使用Xcode 8.2.1并且我有HomeKit附件模拟器工作,我可以看到我创建的模拟灯,因为我可以将它们打印到控制台,它们都按名称显示。

问题是,我无法将它们添加到附件阵列并将它们作为单元格添加到表视图中。我已检查并重新检查我的单元格上的重用标识符“accessoryId”是否与我在代码中使用的内容相匹配。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if let cell = tableView.dequeueReusableCell(withIdentifier: "accessoryId")  as UITableViewCell? {
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "accessoryId")
        let accessory = accessories[indexPath.row] as HMAccessory
        cell.textLabel?.text = accessory.name
        return cell
    }
    return UITableViewCell()
}

关于同样的错误,我已经查看了许多关于SO的其他问题,并且没有一个修复似乎有帮助。

当accessories.append(附件)被注释掉时,打印功能将正确控制从模拟器中记录所有配件的所有名称。

func accessoryBrowser(_ browser: HMAccessoryBrowser, didFindNewAccessory accessory: HMAccessory) {
    print(accessory.name)

    accessories.append(accessory)
    tableView.reloadData()
}

但是当我取消注释accessories.append(附件)时,我收到此错误

  

UITableView ...无法从其数据源“

获取单元格

error

我该如何解决?

1 个答案:

答案 0 :(得分:0)

这条线对我来说没有意义:

tableView.register(UITableViewCell.self, forCellReuseIdentifier: "accessoryId")

您正在为cellForRowAtIndexPath内的表注册单元格,并且每次调用它时。尝试将其放在viewDidLoad中。但是,如果您使用的是故事板,我认为您根本不需要这样做。

这是Swift 3中的语法(你的问题标题说你正在使用它):

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if let cell = tableView.dequeueReusableCell(withIdentifier: "accessoryId") {
    // OR for Custom Cell:
    // if let cell = tableView.dequeueReusableCell(withIdentifier: "accessoryId") as? CustomTableViewCell {
        return cell
    }
    return UITableViewCell()
}