我需要在应用程序中引用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。
答案 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。“