2013-07-03 3 views
0

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

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------------------------------------------ 

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

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); 
} 

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

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

+0

Если вы используете правильную структуру данных, эта проблема исчезнет. Попробуйте использовать HashMap, который не позволяет дублировать. – AAV

+0

Не могли бы вы рассказать мне, как использовать HashMap. –

ответ

-2

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

+0

Что делать, если у меня есть несколько объектов с одинаковой фамилией. –

+0

Просто введите номер телефона в качестве ключа. У вас не может быть более одного номера телефона, кроме дубликата. – AAV

+0

Что делать, если у вас есть два человека с одинаковой фамилией и номером? Такие, как муж и жена, имеющие одну и ту же фамилию и один и тот же домашний номер телефона? – Abizern

Смежные вопросы