我正在学习本教程:
http://www.xmcgraw.com/learn-how-to-create-an-ios-app-using-homekit/
本文中有一个指向GitHub的链接,其中包含代码。
我正在尝试安装一个简单的家庭工具包应用程序并运行它来打开和关闭一盏灯。我已经看完了苹果的HomeKit入门指南。我确实有一个付费的苹果开发者会员,而provisioning profile允许我构建应用程序并在我的iPhone(iOS10.2的6s)上运行。我使用的是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()
}

我已经看了很多其他问题,所以关于同一个错误,没有一个修复似乎有帮助。
当accessories.append(accessority)被注释掉时,print函数将控制台正确记录模拟器中找到的所有附件的名称。
func accessoryBrowser(_ browser: HMAccessoryBrowser, didFindNewAccessory accessory: HMAccessory) {
    print(accessory.name)

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

但是当我取消注释accessories.append(accessority)时,我得到这个错误
UITableView。。。无法从其数据源获取单元格“
我该怎么解决?

最佳答案

这句话对我来说毫无意义:

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()
}

关于ios - 通过教程制作简单的HomeKit应用并添加HMAccessory时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42893908/

10-09 16:14