iOS 获取通讯录里边的电话号码AddressBook

1  首先导入库 <AddressBook/AddressBook.h>

2 然后在导入#import <AddressBook/AddressBook.h>文件

3 声明  @property (nonatomic,assign) ABAddressBookRef addressBook;//电话簿

  并进行初始化   self.addressBook = ABAddressBookCreateWithOptions(NULL, NULL);

4 然后进行获取通讯录的操作

ABAddressBookRequestAccessWithCompletion(self.addressBook, ^(bool granted, CFErrorRef error) {
        if(!granted)
        {
            NSLog(@"未获得访问权限");
        }
        //权限状态
        ABAuthorizationStatus status = ABAddressBookGetAuthorizationStatus();
        if(status!=kABAuthorizationStatusAuthorized)
        {
            NSLog(@"未获得通讯录权限");
        }
        
        //取得记录
        CFArrayRef allPeopleCF = ABAddressBookCopyArrayOfAllPeople(self.addressBook);
        NSMutableArray *allPeople = (__bridge NSMutableArray *)(allPeopleCF);
        
        
        
        //过滤没用的号码
        for (int i = 0; i<allPeople.count; i++) {
            //获得记录
            ABRecordRef recordRef = (__bridge ABRecordRef)(allPeople[i]);
            //获得姓
            NSString *firstName = (__bridge NSString *)(ABRecordCopyValue(recordRef, kABPersonFirstNameProperty));
            //获得名
            NSString *lastName = (__bridge NSString *)(ABRecordCopyValue(recordRef, kABPersonLastNameProperty));
            //获得电话号码
            ABMultiValueRef phoneNumbersRef = ABRecordCopyValue(recordRef, kABPersonPhoneProperty);
            
            //获得电话号码的长度
            long count = ABMultiValueGetCount(phoneNumbersRef);
            //定义一个字符串用来接收电话号码
            NSString *numStr = @"";
            if (count>0) {
                //将ABMultiValueRef转换成nsstring类型的
                numStr = (__bridge NSString *)(ABMultiValueCopyValueAtIndex(phoneNumbersRef, 0));
                //去掉86 - 还有空格
                numStr = [numStr stringByReplacingOccurrencesOfString:@"+86" withString:@""];
                numStr = [numStr stringByReplacingOccurrencesOfString:@"-" withString:@""];
                numStr = [numStr stringByReplacingOccurrencesOfString:@" " withString:@""];
            }
            
            
            //如果最后的是11位 就表示符合条件
            if (numStr.length == 11){
                
//                //将电话号放在可变字符串里边方便作为参数
//                if(i ==allPeople.count-1){
//                    [self.allPhoneNum appendString:[NSString stringWithFormat:@"%@",numStr]];
//                }else{
//                    [self.allPhoneNum appendString:[NSString stringWithFormat:@"%@,",numStr]];}
//                
//                NSLog(@"self.allPhoneNum:%@",self.allPhoneNum);
                
                //将电话号码存起来
                [self.bookdatas addObject:numStr];
            }
            
            
        }
        
        
        
    });

然后用bookDatas 在tableview中进行展示就可以了

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Alice

(whh仅供自己参考)进行ip网络请求的步骤

这个过程大致是这个样子: 1 添加通知 2 发送网络请求 里边有一个发送通知的操作 3 执行发送通知的具体操作 代码如下: 1 在VC添加通知 [[NSNo...

1966
来自专栏技术总结

DWIntrosPage 简单定制引导页

下面摘取部分代码 DWIntrosPageContentViewController

1385
来自专栏wOw的Android小站

[Objective-C] KVC 和 KVO

KVC是一种用间接方式访问类的属性的机制。比如你要给一个类中的属性赋值或者取值,可以直接通过类和点运算符实现,当然也可以使用KVC。不过对于私有属性,点运算符就...

1531
来自专栏慎独

UIViewController生命周期分析

1704
来自专栏一“技”之长

iOS获取通讯录联系人信息 原

随着apple对用户隐私的越来越重视,IOS系统的权限设置也更加严格,在获取系统通讯录之前,我们必须获得用户的授权。权限申请代码示例如下:

2403
来自专栏陈满iOS

[iOS学习笔记]·FMDB:第三方数据库处理框架·用法示例篇(附源码Demo)

FMDatabase的实例对象_db在执行SQL语句的时候采取类似下面的代码。其中,有两种风格,一种在executeUpdate方法后面直接写上字符串的字面量语...

1882
来自专栏Python小屋

Python模拟汉诺塔问题移动盘子的过程

据说古代有一个梵塔,塔内有三个底座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动...

5176
来自专栏一“技”之长

iOS通过NSUserDefaults实现简单的应用间数据传递

NSUserDefaults是用于保存应用程序设置,应用信息等轻量级数据的的一个类,其本质是将数据写为plist文件的形式保存在本地。在IOS中,系统为每一个应...

932
来自专栏.NET开发那点事

关于Form.Close跟Form.Dispose

我们在Winform开发的时候,使用From.Show来显示窗口,使用Form.Close来关闭窗口。熟悉Winform开发的想必对这些非常熟悉。但是Form类...

2246
来自专栏iOS技术

iOS多线程应用(三):NSOperation

NSOperation是基于GCD的面向对象封装,在各大开源库里面我们常常看到它的身影。它的使用很简单易懂,基本上你点进Api就会用了,本文就最常用的功能进行讲...

33011

扫码关注云+社区

领取腾讯云代金券