唯一标识ABRecord记录:[ABRecord uniqueId]是不可变的吗?

时间:2011-08-16 20:46:04

标签: cocoa macos abaddressbook

我需要在应用程序中引用ABPerson记录。我使用

提供的unique ID
  - (NSString *)uniqueId

并将其附加到我的应用内联系记录中。

此外,我将ABPerson's vCardRepresentation保存为后备广告。如果应用程序不再能够使用uniqueID找到ABRecord,则应用程序会要求用户使用保存的vCardRepresentation恢复地址簿记录。一切正常。

不幸的是,一位朋友告诉我,uniqueId不是不可变的:在同步期间,uniqueId可能会突然改变。

根据他的说法,在iOS文档的某处,Apple解释说 immutable 使用uniqueId识别ABPersons是不可能的。在OS X的Cocoa文档中,我没有找到这样的提示。

在给定的Mac上,uniqueId可能会突然改变吗?如果这是真的,那么从外部应用程序中识别ABPerson记录的正确方法是什么?

如果uniqueID不是不可变的,我当然可以使用GUID分配自定义属性。不幸的是,自定义字段不同步。

当然,我更喜欢使用uniqueId。

2 个答案:

答案 0 :(得分:5)

至于它的价值,来自Apple的techdoc:

kABUIDProperty 此记录的唯一ID。无论记录变化多少,保证永远不会改变。如果需要存储对记录的引用,请使用此值。键入:kABStringProperty。 适用于Mac OS X v10.2及更高版本。 在ABGlobals.h中声明。

答案 1 :(得分:2)

看起来kABUIDProperty方法可能不再适用了。我在以下评论中发现了这篇博客文章并进行了更多讨论: http://blog.clickablebliss.com/2011/11/07/addressbook-record-identifiers-on-mac-and-ios/

一个恰当的例子:如果用户决定打开iCloud同步,该用户地址簿中的唯一ID将会更改。如果用户关闭iCloud同步,它们将再次更改。

附录:查看StackOverflow条目here可能是值得的。

Apple的文档确实这样说(引自链接):

“保持对特定记录的长期引用的推荐方法是存储 除了标识符之外,名字和姓氏,或名字和姓氏的哈希值。 按ID查找记录时,请将记录的名称与存储的名称进行比较。如果它们不匹配,请使用存储的名称查找记录,并存储记录的新ID。“