Предотвращение дублирования контактов при добавлении из.vcf всех контактов с помощью метода ABPersonCreatePeopleInSourceWithVCardRepresentation

Я использую следующий код, чтобы создать представление V-карты для всех моих контактов.

ABAddressBookRef addressBook = ABAddressBookCreate();
//------------------------------------------------- create vcf file------------------------------------------
CFArrayRef contacts = ABAddressBookCopyArrayOfAllPeople(addressBook);

CFDataRef vcards = (CFDataRef)ABPersonCreateVCardRepresentationWithPeople(contacts);

NSString *vcardString = [[NSString alloc] initWithData:(NSData *)vcards encoding:NSUTF8StringEncoding];

NSError *error;
NSFileManager *fileMgr = [NSFileManager defaultManager];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *folderPath = [paths objectAtIndex:0];
NSString *filePath = [folderPath stringByAppendingPathComponent:@"contacts.vcf"];

[vcardString writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];

NSLog(@"Documents directory: %@",[fileMgr contentsOfDirectoryAtPath: folderPath error:&error]);

//------------------------------------------------- create vcf file------------------------------------------

После этого я добавил контакты в свою адресную книгу, используя следующий код:

BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:filePath];
if (exists)
{
    NSLog(@"File Exist and Ready to send");
   NSString *vCardString = [[NSString alloc]initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
    CFDataRef vCardData = (CFDataRef)[vCardString dataUsingEncoding:NSUTF8StringEncoding];
    CFArrayRef vCardPeople = ABPersonCreatePeopleInSourceWithVCardRepresentation(defaultSource, vCardData);
    for (CFIndex index = 0; index < CFArrayGetCount(vCardPeople); index++) {
        ABRecordRef person = CFArrayGetValueAtIndex(vCardPeople, index);
        ABAddressBookAddRecord(addressBook, person, NULL);
        CFRelease(person);
    }
    CFRelease(vCardPeople);

    ABAddressBookSave(addressBook, NULL);
}

Проблема в том, что когда я добавляю записи в адресную книгу, она не заменяет дублирующиеся контакты. Он просто добавляет все контакты, и почти все контакты становятся дубликатами. Как я могу предотвратить это, чтобы добавить дубликаты. Есть ли какой-либо метод или какое-либо другое предложение, которое может помочь. Я думаю, прежде чем добавить контакт в адресную книгу, мы должны проверить, есть ли такой же контакт уже в адресной книге или нет. Но как мы можем проверить, есть ли контакт в адресной книге или нет.

Заранее спасибо.

1 ответ

Просто используйте NSMutableDictionary и введите ключ в качестве фамилии. Так что это заменит старую запись новой записью. У вас не будет более одного объекта для ключа.

Другие вопросы по тегам