iOS7中读取通讯录信息授权问题

本文介绍了在iOS7及更高版本中如何正确获取用户通讯录访问权限,并提供了两种不同方法的对比,强调了一种方法能够立即执行通讯录相关操作的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家知道在读取通讯录信息时需要引用AddressBook、AddressBookUI得框架,然后就可以进行相关操作。但是在iOS7中不能够像iOS6中直接读取通讯录信息,而是需要代码中取得用户授权才可以进行相关操作。

推荐使用如下方式:

CFErrorRef *error = nil;
    
    
        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) {

        

    NSMutableArray *addressBookTemp = [NSMutableArray array];

    //ABAddressBookRef addressBooks = ABAddressBookCreate();

    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);

    CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);

    

    

    for (NSInteger i = 0; i < nPeople; i++)

    {

        TKAddressBook *addressBook = [[TKAddressBook alloc] init];

        ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);

        CFStringRef abName = ABRecordCopyValue(person, kABPersonFirstNameProperty);

        CFStringRef abLastName = ABRecordCopyValue(person, kABPersonLastNameProperty);

        CFStringRef abFullName = ABRecordCopyCompositeName(person);

     } 

...................................

}
另外,网上还有一种版本

//    CFErrorRef *error = nil;
//    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);
//    
//    __block BOOL accessGranted = NO;
//    
//    if (ABAddressBookGetAuthorizationStatus()==kABAuthorizationStatusNotDetermined){
//        ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
//            
//            accessGranted=granted;
//        });
//        
//    }
//    else if (ABAddressBookGetAuthorizationStatus()==kABAuthorizationStatusAuthorized){
//        accessGranted=YES;
//    }
//    else
//    {
//        NSLog(@"用户未授权提示");
//    }
    
不推荐后者得原因是:经过测试(模拟器)后者取得用户授权后并不能立刻执行获取联系人等得相关操作,而前者可以顺利执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值