iOS 通讯录访问(代码块的)
来源:互联网 发布:gdb调试linux内核 编辑:程序博客网 时间:2024/06/05 09:49
#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);
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//名字
}];
- iOS 通讯录访问(代码块的)
- iOS 通讯录访问(一)
- iOS 通讯录访问(二)
- 代码块的访问顺序
- 关于iOS系统中通讯录的访问
- 关于iOS系统中通讯录的访问
- 关于iOS系统中通讯录的访问
- iOS 访问通讯录
- IOS---访问通讯录
- IOS如何访问通讯录
- iOS 访问通讯录
- iOS 访问通讯录
- iOS -- 访问通讯录
- ios 访问通讯录
- IOS访问通讯录
- IOS如何访问通讯录
- iOS 访问通讯录
- iOS访问通讯录
- 读Socket流时产生阻塞的解决方案
- Cmake的使用例子
- 程序的核心是什么
- OC的KVC和KVO机制
- copy(浅拷贝) mutableCopy(深拷贝)
- iOS 通讯录访问(代码块的)
- ios响应者链条
- 僵尸移动效果
- Formal System-范式(Normalformen)
- merge interval leetcode java
- 软件定义存储(SDS)的定义及其分类
- 字符串四则运算之一无限位数相加的设计
- 字符串四则运算之二无限位数相减的设计
- codeforces PawnChess