My iOS application checks contacts from time to time and imports new to its own database.
I checks that contact already exists by identifier
field, that usually filled by 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]];
...
}
Sometimes identifier excepts UUID contains :ABPerson
string (eg 9326A125-3C0A-494F-9E50-BBFCF1140EF0:ABPerson
), and such contact appears just one time. Next time appears same contact, but with another UUID and without :ABPerson
.
So, my contacts importer considers that they are 2 different contacts and saves them 2 times.
What is the :ABPerson
string in CNContact identifier?
I know about AddressBook framework with ABPerson
class, but I'm using Contacts
framework for work with device contacts, why :ABPerson
appears here?
Can I just filter or check this string in the identifier for preventing contacts duplicates?
Are there other strings that may be contained in CNContact
identifiers?
来源:https://stackoverflow.com/questions/41379885/what-is-the-abperson-string-in-cncontact-identifier