Протестировано на iOS 8.1
и iPhone6+ Simulator
с XCode 6.1
.
Я сделал два метода: addSampleContacts
и removeSampleContacts
, которые вы можете добавить в свой проект, чтобы добавлять (или удалять) контакты в вашем симуляторе.
Для этого
- Вам нужно добавить
AddressBook.framework
и AddressBookUI.framework
в вашем проекте.
- Импорт
#import <AddressBook/AddressBook.h>
в классе (или контроллере), где вы хотите добавить/удалить выборочные контакты
- Вам нужен контактный файл (формат
.vcf
). Вы можете использовать файл контакта вашего телефона для этого теста, чтобы иметь большое количество реальных (реальных) контактов. Добавьте этот файл в свой проект.
- Если вы настроили это, добавьте ниже функции для того же самого.
-(void)addSampleContacts
{
NSError *error;
CFErrorRef castError = (__bridge CFErrorRef)error;
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &castError);
__block BOOL accessAllowed = NO;
if (ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6 or above
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
accessAllowed = granted;
dispatch_semaphore_signal(sema);
});
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
}
if(accessAllowed)
{
NSString *vFilePath = [[NSBundle mainBundle] pathForResource:@"YourContactFile" ofType:@"vcf"];
NSData *myData = [NSData dataWithContentsOfFile:vFilePath];
CFDataRef vCardData = (__bridge CFDataRef)myData;
NSError *error;
CFErrorRef castError = (__bridge CFErrorRef)error;
ABAddressBookRef ContactBook = ABAddressBookCreateWithOptions(NULL, &castError);
ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(ContactBook);
CFArrayRef vCardContact = ABPersonCreatePeopleInSourceWithVCardRepresentation(defaultSource, vCardData);
NSArray *arrayContacts = (__bridge_transfer NSArray *)vCardContact;
NSInteger totalVCFContactCount = arrayContacts.count;
for (CFIndex index = 0; index < totalVCFContactCount; index++)
{
ABRecordRef contact = CFArrayGetValueAtIndex(vCardContact, index);
ABAddressBookAddRecord(ContactBook, contact, NULL);
ABAddressBookSave(ContactBook, nil);
CFRelease(contact);
}
CFRelease(vCardContact);
CFRelease(defaultSource);
}
NSLog(@"Contacts added.");
}
-(void)removeSampleContacts
{
NSError *error;
CFErrorRef castError = (__bridge CFErrorRef)error;
ABAddressBookRef contactBook = ABAddressBookCreateWithOptions(NULL, &castError);
__block BOOL accessAllowed = NO;
if (ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6 or above
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
ABAddressBookRequestAccessWithCompletion(contactBook, ^(bool granted, CFErrorRef error) {
accessAllowed = granted;
dispatch_semaphore_signal(sema);
});
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
}
if(accessAllowed)
{
CFArrayRef allContacts = ABAddressBookCopyArrayOfAllPeople(contactBook);
NSArray *arrayContacts = (__bridge_transfer NSArray *)allContacts;
for (int i = 0; i < arrayContacts.count; i++)
{
ABRecordRef ref = CFArrayGetValueAtIndex(allContacts, i);
ABAddressBookRemoveRecord(contactBook, ref, nil);
ABAddressBookSave(contactBook, nil);
}
}
NSLog(@"Contacts removed.");
}
Вам не нужно спросить (или проверить) для разрешения, если вы уже делаете это раньше.
Вы также можете загрузить файл vcf, чтобы мы могли легко использовать этот файл. Благодарю. – GeneCode
Если у вас есть учетная запись Google или учетная запись iTunes, вы можете экспортировать файл 'vcf' для контактов вашего телефона. – Hemang