首页 > 代码库 > iOS 获取通讯录

iOS 获取通讯录

1.添加 AddressBook库

- (IBAction)add:(id)sender {

    ABAddressBookRequestAccessWithCompletion(ABAddressBookRef addressBookRef, ^(bool granted,CFErrorRef error) {

       if (granted) {

            dispatch_async(dispatch_get_main_queue(), ^{

              

NSArray  * array=[selfgetContactsFromAddressBook];

            });

        }else {

            // TODO: Show alert

        }

    });

}


-(NSMutableArray *)getContactsFromAddressBook

{

   CFErrorRef error = NULL;

    NSMutableArray * contacts = [[NSMutableArrayalloc]init];

    

   ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);

    

   if (addressBook) {

       NSArray *allContacts = (__bridge_transferNSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);

       NSMutableArray *mutableContacts = [NSMutableArrayarrayWithCapacity:allContacts.count];

        

       NSUInteger i = 0;

       for (i = 0; i<[allContactscount]; i++)

        {

            //THContact 一个model对象,有name和phoneNum两个属性

           THContact *contact = [[THContactalloc] init];

           ABRecordRef contactPerson = (__bridgeABRecordRef)allContacts[i];

            contact.recordId =ABRecordGetRecordID(contactPerson);

            

            // Get first and last names

           NSString *firstName = (__bridge_transferNSString*)ABRecordCopyValue(contactPerson,kABPersonFirstNameProperty);

           NSString *lastName = (__bridge_transferNSString*)ABRecordCopyValue(contactPerson,kABPersonLastNameProperty);

           NSString * midName = (__bridge_transferNSString*)ABRecordCopyValue(contactPerson,kABPersonMiddleNameProperty);

            

            // Set Contact properties

            contact.firstName = firstName;

            contact.lastName = lastName;

            contact.middleName = midName;

            

            // Get mobile number

           ABMultiValueRef phonesRef = ABRecordCopyValue(contactPerson, kABPersonPhoneProperty);

            contact.phone = [selfgetMobilePhoneProperty:phonesRef];

           if(phonesRef) {

               CFRelease(phonesRef);

            }

            

           if (contact.phone.count >0) {

                [mutableContactsaddObject:contact];

            }

        }

        

       if(addressBook) {

           CFRelease(addressBook);

        }

        

        contacts = [NSMutableArrayarrayWithArray:mutableContacts];

       return contacts;

    }

   else

    {

       NSLog(@"Error");

        

    }

    return nil;

}

- (NSMutableArray *)getMobilePhoneProperty:(ABMultiValueRef)phonesRef

{

    NSMutableArray * array = [NSMutableArrayarray];

   for (int k =0; k<ABMultiValueGetCount(phonesRef); k++)

    {

        //获取电话Label

        //        NSString * personPhoneLabel = (__bridge NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(phonesRef, k));

        //获取該Label下的电话值

       NSString * personPhone = (__bridgeNSString*)ABMultiValueCopyValueAtIndex(phonesRef, k);

       if (personPhone) {

            [arrayaddObject:personPhone];

        }

    }

   return array;

}



iOS 获取通讯录