Ios HomeKit HMHome和HMRoom标识符/额外元数据

Ios HomeKit HMHome和HMRoom标识符/额外元数据,ios,core-data,homekit,Ios,Core Data,Homekit,在我的应用程序中,我使用HomeKit。您可以添加/删除HMHome和HMRoom对象,但我还想向它们添加一些元数据。例如,在我的应用程序中,我希望能够向HMRoom添加一个图标,并向其中添加一组项目 我的解决方案是将它与CoreData结合使用,并存储有关HMRoom的额外信息,但除了名称之外,无法识别HMHome和HMRoom对象。如果我的应用程序是世界上唯一一个编辑HomeKit对象的应用程序,那么这不会是一个问题,但当然也可能有其他应用程序,也会调整HMHome和HMRoom对象(删除它

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

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

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

  • 启动我的应用程序
  • 添加HMHome和HMRoom对象
  • 通过我的应用程序向HMRoom对象添加一些元数据,该应用程序存储在我的CoreData数据库中
  • 退出我的申请
  • 启动另一个应用程序并重命名他们刚刚创建的HMRoom
  • 重新启动我的应用程序
  • 因为HMHome和HMRoom对象没有已知的标识符,所以我再也找不到存储在CoreData中的元数据,而且元数据实际上已经丢失,因为我无法再将创建的HMRoom的名称与CoreData数据库中的数据相匹配


    因此,我的问题是:有没有一种方法可以“识别”HMRoom和HMHome对象,而不是它们的名称?

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


    因此,您可以保存指定给给定家庭或房间的附件以及其他元数据。如果家或房间的名称发生变化,在大多数情况下,您仍然可以通过查看存储的附件来检测原始名称。

    在iOS9中,您可以使用uniqueIdentifier来始终识别相同的对象。无论房间是否重命名,此UUID都保持不变

    我认为这是目前最好的解决办法。用户不太可能在家中移动配件,因此我们可以放心地使用家中的配件来识别它。但是,对于在房间之间移动附件的用户来说,情况并非如此。我认为这种方法的一个扩展是创建家庭和房间附件ID的清单,并将其用作每个对象的“指纹”。如果某个住宅或房间的名称发生了更改,您可以返回到“指纹”来重新识别它。您还可以考虑配件移动的百分比匹配。您能详细说明吗?不确定您指的是什么。不幸的是,UUID字符串似乎每次在新应用程序启动时都会更改。请小心。在同一iCloud帐户的多个设备上,HomeKit对象(HMHome、HMAccessory,…)的
    唯一标识符
    不相同。只需做一个简单的实验:在一部手机上打印一个
    HMHome
    uniqueIdentifier
    ,然后在另一部手机上做同样的操作(使用相同的iCloud),你会发现2个
    uniqueIdentifier
    是完全不同的。还不确定如何识别HomeKit对象。是的,UUID是在创建手机上的数据库时生成的。UUID应该保持不变。因此,当他们的HomeKit数据库被填充时,新的开始、在另一部手机上共享主页或只是在手机上重置HomeKit将创建不同的标识符。还需要注意的是,这在iOS模拟器上不起作用。在iOS模拟器上,您将在每次应用程序启动时获得不同的家庭ID。但是,在iOS设备上,每个应用程序启动时的主ID都是相同的。