5

在我的应用程序中,我使用的是 HomeKit。您可以添加/删除 HMHome 和 HMRoom 对象,但我还想向它们添加一些元数据。例如,在我的应用程序中,我希望能够向 HMRoom 添加一个图标并向其添加一个项目数组。

我的解决方案是我将它与 CoreData 结合使用并存储有关 HMRoom 的额外信息,但是除了它们的名称之外,没有办法识别 HMHome 和 HMRoom 对象。如果我的应用程序是世界上唯一一个编辑 HomeKit 对象的应用程序,这将不是问题,但当然可能还有其他应用程序,也可以调整 HMHome 和 HMRoom 对象(删除它们,重命名它们)。

因此,当用户执行以下操作之一时,我真的会遇到问题:

  1. 开始我的申请
  2. 添加一个 HMHome 和 HM Room 对象
  3. 通过我的应用程序向 HMRoom 对象添加一些元数据,该应用程序存储在我的 CoreData 数据库中
  4. 退出我的申请
  5. 启动另一个应用程序并重命名他们刚刚创建的 HMRoom
  6. 再次启动我的应用程序

因为 HMHome 和 HMRoom 对象没有已知标识符,所以我再也找不到存储在 CoreData 中的元数据,而且元数据实际上已经丢失,因为我无法再将名称与创建的 HMRoom 与我的 CoreData 数据库中的数据匹配。

所以,我的问题是:除了名字之外,有没有办法“识别”HMRoom 和 HMHome 对象?

4

2 回答 2

3

In iOS9, you can use the uniqueIdentifier to always identify the same object. This UUID stays the same whether the room gets renamed.

于 2015-12-10T15:58:05.027 回答
1

根据文档HMHomeHMRoom除了名称之外没有其他标识符。但是它们都具有accessories属性,并且 HMAccessory具有标识符属性,该属性是持久的(至少在用户删除附件并再次添加之前,我希望这不会是常见的事情)。

因此,您可以将分配给给定家庭或房间的配件与其他元数据一起保存。如果房屋或房间的名称发生变化,在大多数情况下,您应该仍然能够通过查看存储的配件来检测原始名称。

于 2015-02-15T20:26:34.250 回答