通讯录(有界面的和无界面的)

通讯录(有界面)
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
   
   
//1.创建通讯录 联系人控制器
   
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc]init];
   
   
//设置代理
    picker.
peoplePickerDelegate = self;
   
   
//2.展示控制器
    [
self presentViewController:picker animated:YES completion:nil];
   
}
//选中一个联系人信息的时候就会调用
//实现了peoplePickerNavigationController 方法 选择联系人自动销毁模态框
- (
void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person
{
   
   
//内存泄露
   
//潜在 内存泄露
   
//内存
//    oc  框架  编译标记  告诉系统  person.h  person.m  30
//    .a 文件
//    c malloc    free
//    c++  new  delete
//    oc  alloc  retain  copy  release
//    cf copy  cr eate  CFRelease
   
   
//Record   记录  c语言  调用一个方法 -> 传递参数 -> 完成功能
   
//参数1  person   参数2   属性 电话 姓名
   
//姓名
   
CFStringRef strFirst  =   ABRecordCopyValue(person, kABPersonFirstNameProperty);
   
CFStringRef strLast = ABRecordCopyValue(person, kABPersonLastNameProperty);
   
 
   
//桥接      __bridge 不会转让所有权
   
//转让所有权 __bridge_transfer
   
NSString *firstName = (__bridge_transfer NSString *)(strFirst);
   
NSString *lastName = (__bridge_transfer NSString *)(strLast);
  
   
   
NSLog(@"first  = %@  last = %@ ",firstName,lastName);
   
//    if (strFirst) {
//        CFRelease(strFirst);
//    }
  
//    if (strLast) {
//        CFRelease(strLast);
//    }
   
   
//手机号
   
//类似于数组的类型 里面存放所有的电话号码 -> 遍历
   
ABMultiValueRef multi =   ABRecordCopyValue(person, kABPersonPhoneProperty);
   
   
//不确定  住宅  手机  公司
  
CFIndex index =  ABMultiValueGetCount(multi);
   
for (CFIndex i = 0; i < index; ++i) {
       
//获取数组中  参数1 multi   参数2 哪个下标
     
CFStringRef strPhone =    ABMultiValueCopyValueAtIndex(multi, i);
     
NSString *phone = (__bridge_transfer NSString *)(strPhone);
     
NSLog(@"phone = %@",phone);
       
     
//CFRelease(strPhone);
    }
   
if (multi) {
       
CFRelease
(multi);

    }
}
通讯录(无界面)
授权页面
@implementation AppDelegate


- (
BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   
/*
     kABAuthorizationStatusNotDetermined = 0, 
未决定是否授
     kABAuthorizationStatusRestricted,  
家长限制
     kABAuthorizationStatusDenied,
明确拒绝
     kABAuthorizationStatusAuthorized  //
授权
   
    */

   
//1.授权
   
ABAddressBookRef book = ABAddressBookCreateWithOptions(NULL, NULL);
   
   
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) { //没有授权  需要授权
       
ABAddressBookRequestAccessWithCompletion(book, ^(bool granted, CFErrorRef error) {
           
if (granted) {
               
NSLog(@"授权成功!!");
            }
else{
               
NSLog(@"授权失败!!");
            }
           
        });
    }
   
CFRelease(book);
   
   
return YES;
}
ViewController页面
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
   
//2.获取数据
   
ABAddressBookRef book  =  ABAddressBookCreateWithOptions(NULL, NULL);
   
   
//c 语言 API 获取所有人的记录
   
CFArrayRef arrayref =  ABAddressBookCopyArrayOfAllPeople(book);
   
   
  
CFIndex count =  CFArrayGetCount(arrayref);
   
for (int i = 0; i < count; i++) {
       
//一条记录对应一个人的信息
       
ABRecordRef record =  CFArrayGetValueAtIndex(arrayref, i);
       
//姓名  电话
       
CFStringRef first  =  ABRecordCopyValue(record, kABPersonFirstNameProperty);
       
CFStringRef last  =  ABRecordCopyValue(record, kABPersonLastNameProperty);
       
       
NSString *fistName = (__bridge_transfer NSString *)first;
       
NSString *lastName = (__bridge_transfer NSString *)last;

       
NSLog(@"%@  %@",fistName,lastName);

       
       
ABMultiValueRef multi =   ABRecordCopyValue(record, kABPersonPhoneProperty);
       
       
for (CFIndex i = 0; i < ABMultiValueGetCount(multi); i++ ) {
           
           
CFStringRef strPhone =   ABMultiValueCopyValueAtIndex(multi, i);
           
           
NSString *phone = (__bridge_transfer NSString *)strPhone;
           
NSLog(@"%@" ,phone);
           
        }
       
CFRelease(multi);
    }
   
   
CFRelease(arrayref);
   
CFRelease(book);

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值