CNContact标识符中的“:ABPerson”字符串是什么?

时间:2016-12-29 12:37:10

标签: ios objective-c cncontact

我的iOS应用程序会不时检查联系人,并将新内容导入到自己的数据库中。

我检查identifier字段已存在的联系人,通常由UUID填充:

CNContactStore *store = [CNContactStore new];
[store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError *error) {
if (granted) {
    NSArray *keys = @[CNContactNamePrefixKey,
        CNContactGivenNameKey,
        CNContactMiddleNameKey,
        CNContactFamilyNameKey,
        CNContactInstantMessageAddressesKey];
        NSString *containerId = store.defaultContainerIdentifier;
        NSPredicate *predicate = [CNContact predicateForContactsInContainerWithIdentifier:containerId];
        NSArray *cnContacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:keys error:&err];            
        for (CNContact *contact in cnContacts) {
            ...
            NSString *contactId = [contact identifier];
            [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"uuid == %@", contactId]];

    ...

}

有时标识符除了UUID包含:ABPerson字符串(例如9326A125-3C0A-494F-9E50-BBFCF1140EF0:ABPerson),并且这种联系只出现一次。下次显示相同的联系人,但使用另一个UUID且没有:ABPerson

因此,我的联系人导入器认为他们是2个不同的联系人并将其保存2次。

CNContact标识符中的:ABPerson字符串是什么? 我知道AddressBook frameworkABPerson类,但我使用Contacts框架来处理设备联系人,为什么:ABPerson出现在这里?
我可以在标识符中过滤或检查此字符串以防止联系人重复吗? CNContact标识符中是否包含其他字符串?

1 个答案:

答案 0 :(得分:0)

从“通讯录”应用程序共享联系人时,似乎添加了 :ABPerson。顺便说一句,请注意,即使在同一设备上,共享联系人也可能具有不同的 ID。