Ios 如何使用授权访问以编程方式从通讯簿获取电子邮件地址?(目标C)

Ios 如何使用授权访问以编程方式从通讯簿获取电子邮件地址?(目标C),ios,objective-c,addressbook,abpeoplepickerview,Ios,Objective C,Addressbook,Abpeoplepickerview,如何使用授权访问以编程方式从通讯簿中读取电子邮件地址?我知道这可以通过ABPeoplePicker的帮助实现,但是我正在寻找一种不涉及任何GUI的方法 有人能帮我解决这个问题吗?CFErrorRef error=NULL; CFErrorRef error = NULL; ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error); __block BOOL access

如何使用授权访问以编程方式从通讯簿中读取电子邮件地址?我知道这可以通过ABPeoplePicker的帮助实现,但是我正在寻找一种不涉及任何GUI的方法

有人能帮我解决这个问题吗?

CFErrorRef error=NULL;
    CFErrorRef error = NULL;
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);

    __block BOOL accessGranted = NO;

    if (ABAddressBookRequestAccessWithCompletion != NULL)
    {
        // we're on iOS 6
        dispatch_semaphore_t sema = dispatch_semaphore_create(0);

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

        dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
    }
    else
    { // we're on iOS 5 or older
        accessGranted = YES;
    }


    if (accessGranted)
    {
        NSArray *allContacts = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);

        NSLog(@"People Count :- %d", (int)[allContacts count]);

        for (int i = 0 ; i < [allContacts count] ; i++)
        {
            ABRecordRef contactPerson = (__bridge ABRecordRef)allContacts[i];

            ABMultiValueRef emails = ABRecordCopyValue(contactPerson, kABPersonEmailProperty);

            NSUInteger j = 0;
            for (j = 0; j < ABMultiValueGetCount(emails); j++)
            {
                NSString *email = (__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(emails, j);
                if (j == 0)
                    NSLog(@"Person Home Email = %@ ", email);
                else if (j==1)
                    NSLog(@"Person Work Email = %@ ", email);

                emailAddressList = [[EmailAddressList alloc] init];

                emailAddressList.strEmailAddress = email;
                emailAddressList.strEmailAddressType = @"AddressBook";

                [emailAddressList InsertRecordForEmailAddress:emailAddressList];
            }
        }
    }
ABAddressBookRef addressBook=ABAddressBookCreateWithOptions(NULL,错误(&R); __block BOOL accessgrated=否; if(ABAddressBookRequestAccessWithCompletion!=NULL) { //我们在iOS 6上 dispatch\u semaphore\u t sema=dispatch\u semaphore\u create(0); ABAddressBookRequestAccessWithCompletion(addressBook,^(已授予bool,CFErrorRef错误) { accessgrated=已授予; 调度信号量信号(sema); }); 调度信号量等待(永远调度时间); } 其他的 {//我们使用的是iOS 5或更高版本 accessgrated=是; } 如果(已授予访问权限) { NSArray*所有联系人=(u_u桥u传输NSArray*)ABAddressBookCopyArrayFallPeople(addressBook); NSLog(@“人员计数:-%d”,(int)[所有联系人计数]; 对于(int i=0;i<[allContacts count];i++) { ABRecordRef contactPerson=(桥ABRecordRef)所有联系人[i]; ABMultiValueRef emails=ABRecordCopyValue(联系人,kABPersonEmailProperty); 整数j=0; 对于(j=0;j
此代码向我显示了一个名为“使用未声明的标识符emailaddresslist”的错误。请列出我要执行的操作,以及任何建议