Мое приложение 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 раза.
Что такое :ABPerson
строка ABPerson в идентификаторе CNContact?
Я знаю о структуре AddressBook с классом ABPerson
, но я использую структуру Contacts
для работы с контактами устройства, почему :ABPerson
здесь появляется :ABPerson
?
Могу ли я просто фильтровать или проверять эту строку в идентификаторе для предотвращения дублирования контактов?
Существуют ли другие строки, которые могут содержаться в идентификаторах CNContact
?