先导入框架#import <AddressBook/AddressBook.h>
在AppDelegate里面开始写如下内容
//很多授权都是在程序启动的第一次
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//0.这下面的代码作用是会弹出一个框框,提醒您是否允许访问你的通讯录
//1.获取通讯录的授权状态
ABAuthorizationStatus status=ABAddressBookGetAuthorizationStatus();
if (status==kABAuthorizationStatusNotDetermined) {
//2.申请授权
ABAddressBookRef book=ABAddressBookCreateWithOptions(NULL, NULL);
ABAddressBookRequestAccessWithCompletion(book, ^(bool granted, CFErrorRef error) {
if (granted==YES) {
//允许
NSLog(@"允许");
}else{
NSLog(@"不允许");
}
CFRelease(book);
});
}
// Override point for customization after application launch.
return YES;
}
- (void)viewDidLoad {
[super viewDidLoad];
ABAuthorizationStatus status=ABAddressBookGetAuthorizationStatus();
//没有授权就返回
if (status!=kABAuthorizationStatusAuthorized) return;
//1.获得通讯录对象
ABAddressBookRef book=ABAddressBookCreateWithOptions(NULL, NULL);
//2.访问通讯录数据
ABAddressBookRef peopleArray=ABAddressBookCopyArrayOfAllPeople(book);
CFIndex count=CFArrayGetCount(peopleArray);
for (CFIndex i=0; i<count; i++) {
//取出i位置的联系人
ABRecordRef people=CFArrayGetValueAtIndex(peopleArray, i);
//获得姓名
CFStringRef firstName=ABRecordCopyValue(people, kABPersonFirstNameProperty);
CFStringRef lastName=ABRecordCopyValue(people, kABPersonLastNameProperty);
NSLog(@"firstName:%@ lastName:%@",firstName,lastName);
//获得电话
ABMultiValueRef phone=ABRecordCopyValue(people, kABPersonPhoneProperty);
CFIndex phoneCount=ABMultiValueGetCount(phone);
for (CFIndex j=0; j<phoneCount; j++) {
CFStringRef phoneValue=ABMultiValueCopyValueAtIndex(phone, j);
CFStringRef phoneLabel=ABMultiValueCopyLabelAtIndex(phone, j);
NSLog(@"%@ %@",phoneLabel,phoneValue);
}
}
CFRelease(book);
}