Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fetch Contacts in iOS 7

This code works fine with iOS5/iOS6 but not working with iOS7.

CFErrorRef *error = NULL;     ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);     //ABAddressBookRef addressBook = ABAddressBookCreate();     CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);     CFIndex numberOfPeople = ABAddressBookGetPersonCount(addressBook);      for(int i = 0; i < numberOfPeople; i++) {          ABRecordRef person = CFArrayGetValueAtIndex( allPeople, i );          NSString *firstName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty));         NSString *lastName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonLastNameProperty));      //   NSLog(@"Name:%@ %@", firstName, lastName);          ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);         NSString *phoneNumber;         for (CFIndex i = 0; i < ABMultiValueGetCount(phoneNumbers); i++) {             phoneNumber = (__bridge_transfer NSString *) ABMultiValueCopyValueAtIndex(phoneNumbers, i);             //   NSLog(@"phone:%@", phoneNumber);         } 
like image 751
DipakSonara Avatar asked Sep 26 '13 11:09

DipakSonara


People also ask

How do I get all my Contacts on IOS?

On iCloud.com or iCloud for WindowsAfter you turn on iCloud Contacts on your iPhone, iPad, iPod touch, or Mac, your contacts upload to iCloud. You can find and edit your contacts on iCloud.com or in iCloud for Windows. Any changes that you make automatically update on your other devices.


1 Answers

Today updated my example and removed memory leaks :)

 + (NSArray *)getAllContacts {      CFErrorRef *error = nil;     ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);     ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook);     CFArrayRef allPeople = (ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByFirstName));     //CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);       CFIndex nPeople = CFArrayGetCount(allPeople); // bugfix who synced contacts with facebook     NSMutableArray* items = [NSMutableArray arrayWithCapacity:nPeople];      if (!allPeople || !nPeople) {         NSLog(@"people nil");     }       for (int i = 0; i < nPeople; i++) {          @autoreleasepool {              //data model             ContactsData *contacts = [ContactsData new];              ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);              //get First Name             CFStringRef firstName = (CFStringRef)ABRecordCopyValue(person,kABPersonFirstNameProperty);             contacts.firstNames = [(__bridge NSString*)firstName copy];              if (firstName != NULL) {                 CFRelease(firstName);             }               //get Last Name             CFStringRef lastName = (CFStringRef)ABRecordCopyValue(person,kABPersonLastNameProperty);             contacts.lastNames = [(__bridge NSString*)lastName copy];              if (lastName != NULL) {                 CFRelease(lastName);             }               if (!contacts.firstNames) {                 contacts.firstNames = @"";             }              if (!contacts.lastNames) {                 contacts.lastNames = @"";             }                contacts.contactId = ABRecordGetRecordID(person);             //append first name and last name             contacts.fullname = [NSString stringWithFormat:@"%@ %@", contacts.firstNames, contacts.lastNames];               // get contacts picture, if pic doesn't exists, show standart one             CFDataRef imgData = ABPersonCopyImageData(person);             NSData *imageData = (__bridge NSData *)imgData;             contacts.image = [UIImage imageWithData:imageData];              if (imgData != NULL) {                 CFRelease(imgData);             }              if (!contacts.image) {                 contacts.image = [UIImage imageNamed:@"avatar.png"];             }               //get Phone Numbers             NSMutableArray *phoneNumbers = [[NSMutableArray alloc] init];             ABMultiValueRef multiPhones = ABRecordCopyValue(person, kABPersonPhoneProperty);              for(CFIndex i=0; i<ABMultiValueGetCount(multiPhones); i++) {                 @autoreleasepool {                     CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(multiPhones, i);                     NSString *phoneNumber = CFBridgingRelease(phoneNumberRef);                     if (phoneNumber != nil)[phoneNumbers addObject:phoneNumber];                     //NSLog(@"All numbers %@", phoneNumbers);                 }             }              if (multiPhones != NULL) {                 CFRelease(multiPhones);             }              [contacts setNumbers:phoneNumbers];              //get Contact email             NSMutableArray *contactEmails = [NSMutableArray new];             ABMultiValueRef multiEmails = ABRecordCopyValue(person, kABPersonEmailProperty);              for (CFIndex i=0; i<ABMultiValueGetCount(multiEmails); i++) {                 @autoreleasepool {                     CFStringRef contactEmailRef = ABMultiValueCopyValueAtIndex(multiEmails, i);                     NSString *contactEmail = CFBridgingRelease(contactEmailRef);                     if (contactEmail != nil)[contactEmails addObject:contactEmail];                     // NSLog(@"All emails are:%@", contactEmails);                 }             }              if (multiEmails != NULL) {                 CFRelease(multiEmails);             }              [contacts setEmails:contactEmails];              [items addObject:contacts];  #ifdef DEBUG             //NSLog(@"Person is: %@", contacts.firstNames);             //NSLog(@"Phones are: %@", contacts.numbers);             //NSLog(@"Email is:%@", contacts.emails); #endif          }     } //autoreleasepool     CFRelease(allPeople);     CFRelease(addressBook);     CFRelease(source);     return items;  } 

Actually recently wrote pod in Swift 3 using CNContacts, to whom it may need

Swift ContactBook Picker

like image 98
Anton Avatar answered Oct 14 '22 05:10

Anton