通讯录(ios自带无界面)

1,添加框架AddressBook.framework

2,请求权限认证,在Appdelegate.m文件中

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

        /*

         kABAuthorizationStatusNotDetermined = 0, 没有决定是否授权

         kABAuthorizationStatusRestricted,  受限制

         kABAuthorizationStatusDenied,  拒绝

         kABAuthorizationStatusAuthorized  授权

         */

        //请求用户授权

        if(ABAddressBookGetAuthorizationStatus()==kABAuthorizationStatusNotDetermined)

        {

            ABAddressBookRef book=ABAddressBookCreateWithOptions(NULL, NULL);

            ABAddressBookRequestAccessWithCompletion(book, ^(bool granted, CFErrorRef error) {

                if (granted) {

                    NSLog(@"授权成功");

                }

                else

                {

                    NSLog(@"授权失败,%@",error);

                }

            });

            

        }

 

       return YES;

}

 

3,控制器中实现

 

#import "ViewController.h"

#import <AddressBook/AddressBook.h>

 

@interface ViewController ()

 

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

//    /*

//     kABAuthorizationStatusNotDetermined = 0, 没有决定是否授权

//     kABAuthorizationStatusRestricted,  受限制

//     kABAuthorizationStatusDenied,  拒绝

//     kABAuthorizationStatusAuthorized  授权

//     */

//    //请求用户授权

//    if(ABAddressBookGetAuthorizationStatus()==kABAuthorizationStatusNotDetermined)

//    {

//        ABAddressBookRef book=ABAddressBookCreateWithOptions(NULL, NULL);

//        ABAddressBookRequestAccessWithCompletion(book, ^(bool granted, CFErrorRef error) {

//            if (granted) {

//                NSLog(@"授权成功");

//            }

//            else

//            {

//                NSLog(@"授权失败,%@",error);

//            }

//        });

//        

//    }

 

}

//获取数据

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

    //1.创建通讯录

    ABAddressBookRef book=ABAddressBookCreateWithOptions(NULL, NULL);

    //获取所有联系人记录

    CFArrayRef multivalues=ABAddressBookCopyArrayOfAllPeople(book);

    CFIndex count=CFArrayGetCount(multivalues);

    for (CFIndex i=0; i<count; ++i) {

        ABRecordRef record=CFArrayGetValueAtIndex(multivalues, i);

        CFStringRef first=ABRecordCopyValue(record, kABPersonFirstNameProperty);

        CFStringRef last=ABRecordCopyValue(record, kABPersonLastNameProperty);

        NSLog(@"%@,%@",(__bridge_transfer NSString*)first,(__bridge_transfer NSString*)last);

        ABMultiValueRef multiPhones=ABRecordCopyValue(record, kABPersonPhoneProperty);

        

        CFIndex countPhone=ABMultiValueGetCount(multiPhones);

        for (int j=0; j<countPhone; j++) {

            CFStringRef phone=ABMultiValueCopyValueAtIndex(multiPhones, j);

            NSLog(@"phone=%@",(__bridge_transfer NSString*)phone);

        }

        CFRelease(multiPhones);

    }

    CFRelease(multivalues);

    CFRelease(book);

    

}

 

 

 

 

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

@end

原文地址:https://www.cnblogs.com/tangranyang/p/4656144.html