iOS 通讯录访问(代码块的)
2015-11-01 06:56
495 查看
#import <AddressBook/AddressBook.h> 导入该框架
//指向常量的指针
ABAddressBookRef addressBook =
nil;
//判断当前系统的版本
if ([[UIDevicecurrentDevice].systemVersionfloatValue]
>= 6.0)
{
//如果不小于6.0,使用对应的api获取通讯录,注意,必须先请求用户的同意,如果未获得同意或者用户未操作,此通讯录的内容为空
addressBook = ABAddressBookCreateWithOptions(NULL,NULL);//等待同意后向下执行//为了保证用户同意后在进行操作,此时使用多线程的信号量机制,创建信号量,信号量的资源数0表示没有资源,调用dispatch_semaphore_wait会立即等待。若对此处不理解,请参看GCD信号量同步相关内容。
dispatch_semaphore_t sema =dispatch_semaphore_create(0);//发出访问通讯录的请求
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted,CFErrorRef error){
//如果用户同意,才会执行此block里面的方法
//此方法发送一个信号,增加一个资源数
dispatch_semaphore_signal(sema);});
//如果之前的block没有执行,则sema的资源数为零,程序将被阻塞
//当用户选择同意,block的方法被执行, sema资源数为1;
dispatch_semaphore_wait(sema,DISPATCH_TIME_FOREVER);
}
CFArrayRef results =ABAddressBookCopyArrayOfAllPeople(addressBook);
//联系人条目数(使用long而不使用int是为了兼容64位)
NSArray *persons=CFBridgingRelease(results);
// CFArrayRef arrayNames=ABAddressBookCopyPeopleWithName(addressBook, <#CFStringRef name#>)
long peopleCount =
CFArrayGetCount(results);
[persons enumerateObjectsUsingBlock:^(id _Nonnull obj,NSUInteger idx,BOOL *_Nonnull
stop) {
ABRecordRef person= (__bridgeABRecordRef)obj;
ABMultiValueRef phoneNumbers = (ABMultiValueRef)ABRecordCopyValue(person,kABPersonPhoneProperty);
9afa
CFIndex count =
ABMultiValueGetCount(phoneNumbers);
if (count<11) {
}
NSString *number = (__bridgeNSString*)ABMultiValueCopyValueAtIndex(phoneNumbers,0);//电话号码 可能有空格
-
CFRelease(phoneNumbers);
//ABRecordCopyValue(person, kABPersonLastNameProperty) last 姓名
//ABRecordCopyValue(person,kABPersonFirstNameProperty) first 姓名
//ABRecordCopyValue(person,kABPersonMiddleNameProperty) middle 姓名
NSString* contactName=(__bridge NSString*)ABRecordCopyCompositeName(person);//拼合
first middle last//名字
}];
相关文章推荐
- Objective-C的内省(Introspection)用法小结
- Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect实例分析
- Objective-C中NSNumber与NSDictionary的用法简介
- Objective-C中NSLog输出格式大全
- Swift调用Objective-C编写的API实例
- Swift、Objective-C、Cocoa混合编程设置指南
- Objective-c代码如何移植为Swift代码 Objective-c代码转移到Swift过程介绍
- Swift调用Objective-C代码
- 以实例讲解Objective-C中的KVO与KVC机制
- objective-c中生成随机数的方法
- 在Swift中使用Objective-C编写类、继承Objective-C类
- Swift能代替Objective-C吗?
- Objective-C 消息传递机制详解
- 在一个项目中同时使用Swift和Objective-C代码混合编程的方法
- vm安装mac os x 10.7 lion
- objective-c(一)
- objective-c(二)
- objective-c(三)
- objective-c(四)-基本数据类型以及循环和选择结构