Iphone 检索通讯簿数据并以字符串格式显示

Iphone 检索通讯簿数据并以字符串格式显示,iphone,ios,objective-c,abaddressbook,Iphone,Ios,Objective C,Abaddressbook,您好,我正在开发一个应用程序,因为我有一个要求,我有一个按钮操作方法,当我点击按钮时,我应该检索整个通讯录联系人,并以字符串的形式显示我如何做到这一点,任何人都可以用代码告诉我。这几天我都没法做到 我不想使用ABPeoplePickerNavigationController导航并访问它 ,我所需要的是单击按钮访问所有联系人并以字符串形式显示。尝试此操作它适用于iOS 6以及iOS 5.0或更高版本: 首先在中将二进制文件链接到库中添加以下框架 AddressBookUI.framework

您好,我正在开发一个应用程序,因为我有一个要求,我有一个按钮操作方法,当我点击按钮时,我应该检索整个通讯录联系人,并以字符串的形式显示我如何做到这一点,任何人都可以用代码告诉我。这几天我都没法做到

我不想使用
ABPeoplePickerNavigationController
导航并访问它
,我所需要的是单击按钮访问所有联系人并以字符串形式显示。

尝试此操作它适用于iOS 6以及iOS 5.0或更高版本

首先在中将二进制文件链接到库中添加以下框架

  • AddressBookUI.framework
  • 地址簿框架
他们进口

#import <AddressBook/ABAddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
#导入
#进口
然后使用以下代码

ABAddressBookRef addressBook = ABAddressBookCreate();

__block BOOL accessGranted = NO;

if (ABAddressBookRequestAccessWithCompletion != NULL) { // We are on iOS 6
    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
        accessGranted = granted;
        dispatch_semaphore_signal(semaphore);
    });

    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    dispatch_release(semaphore);
}

else { // We are on iOS 5 or Older
    accessGranted = YES;
    [self getContactsWithAddressBook:addressBook];
}

if (accessGranted) {
    [self getContactsWithAddressBook:addressBook];
}

// Get the contacts.
- (void)getContactsWithAddressBook:(ABAddressBookRef )addressBook {
    NSArray *arrayOfPeople = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);

    NSUInteger index = 0;
    NSMutableArray *firstNames = [[NSMutableArray alloc] init];

    for(index = 0; index <= ([arrayOfPeople count] - 1); index++){
        ABRecordRef currentPerson = (__bridge ABRecordRef)[arrayOfPeople objectAtIndex:index];
        NSString *currentFirstName = (__bridge_transfer NSString *)ABRecordCopyValue(currentPerson, kABPersonFirstNameProperty);

        // If first name is empty then don't add to the array
        if (![currentFirstName length] == 0) {
            [firstNames addObject: currentFirstName];
        }

    }
    //OPTIONAL: Use the following line to sort the first names alphabetically
    NSArray *sortedFirstNames = [firstNames sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
    NSLog(@"Total Count = %d \n Sorted By Name = %@", [sortedFirstNames count], sortedFirstNames);
}

ABAddressBookRef addressBook=ABAddressBookCreate();
__block BOOL accessgrated=否;
如果(ABAddressBookRequestAccessWithCompletion!=NULL){//我们在iOS 6上
dispatch\u semaphore\u t semaphore=dispatch\u semaphore\u create(0);
ABAddressBookRequestAccessWithCompletion(addressBook,^(已授予bool,CFErrorRef错误){
accessgrated=已授予;
调度信号灯(信号灯);
});
调度信号灯等待(信号灯,调度时间永远);
调度释放(信号量);
}
否则{//我们使用的是iOS 5或更高版本
accessgrated=是;
[self-getContactsWithAddressBook:addressBook];
}
如果(已授予访问权限){
[self-getContactsWithAddressBook:addressBook];
}
//获取联系人。
-(无效)getContactsWithAddressBook:(ABAddressBookRef)addressBook{
NSArray*arrayOfPeople=(u_桥_传输NSArray*)ABAddressBookCopyArrayOfPeople(addressBook);
整数指数=0;
NSMUTABLEARRY*firstNames=[[NSMUTABLEARRY alloc]init];
对于(index=0;index请尝试此项

    ABAddressBookRef addressBook = ABAddressBookCreate();
    NSArray *people = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
    for(id person in people){
         NSString *name = [NSString stringWithFormat:@"%@ %@",(NSString *)ABRecordCopyValue( person, kABPersonFirstNameProperty ),(NSString *)ABRecordCopyValue( person, kABPersonLastNameProperty )];
    //fetch multiple phone nos.
        ABMultiValueRef multi = ABRecordCopyValue(person, kABPersonPhoneProperty);
        for (CFIndex j=0; j < ABMultiValueGetCount(multi); j++) {
            NSString* phone = (NSString*)ABMultiValueCopyValueAtIndex(multi, j);
            [numbersArray addObject:phone];
            [phone release];
        }

          /fetch multiple email ids.
        ABMultiValueRef multiemail = ABRecordCopyValue(person, kABPersonEmailProperty);
        for (CFIndex j=0; j < ABMultiValueGetCount(multiemail); j++) {
             NSString* email = (NSString*)ABMultiValueCopyValueAtIndex(multiemail, j);
             NSLog(@"Email=%@",email);
        }
    }

Pl使用搜索。
abAddressBookCopyArrayFallPeople
是您需要的。ABAddressBookRef addressBook=ABAddressBookCreate();CFArrayRef allPeople=abAddressBookCopyArrayFallPeople(addressBook);CFIndex NPPeople=ABAddressBookGetPersonCount(addressBook);for(int i=0;i numbersArray=[[NSMutableArray alloc] init];