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

通讯录(ios自带无界面)的更多相关文章

  1. Jenkins构建自动化脚本执行无界面解决方法

    场景: jenkins构建selenium自动化用例的时候,会有jenkins自带服务后台运行自动化脚本,可无界面运行IE.Chrome.Firefox. 然而运行IE浏览器时候(IE比较特殊),Je ...

  2. 批处理启动vm虚拟机服务 vm12启动无界面启动vm虚拟机系统 windows上如何操作服务 sc net启动关闭服务

    windows(win10)批处理脚本 打开vm虚拟机的服务,并且开启无界面虚拟机 @echo off net start "vds" net start "VMAuth ...

  3. XVFB实现selenium在linux上无界面运行安装篇

    selenium在linux上无界面运行,其实是非常简单的.具体的方法有使用HtmlUnitDriver或者PhantomJSDriver,有时间我会写写关于这两个东东的文章,其实基本和ChromeD ...

  4. iOS-通讯录(无界面)

    通讯录(无界面) #import "AppDelegate.h" #import <AddressBook/AddressBook.h> @interface AppD ...

  5. iOS Swift WisdomHUD 提示界面框架

    iOS Swift WisdomHUD 提示界面框架  Framework Use profile(应用简介) 一:WisdomHUD简介 今天给大家介绍一款iOS的界面显示器:WisdomHUD,W ...

  6. iOS 跳转系统设置界面

    iOS 跳转系统设置界面   [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=Pri ...

  7. python之Phantomjs无界面浏览器引擎自动化测试

    文字搬运工,本文主要介绍PhantomJS功能,其中有屏幕快照功能,为后面更新[python接口自动化脚本更新版本],其中新版本中新增自动发送邮件功能正文带图片,使用PhantomJS截取图片后发送邮 ...

  8. ubuntu中如何安装selenium+chrome(headless)无界面浏览器?

    selenium是一个Web的自动化测试工具,它可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生.但是它自身不带浏览器,不支持浏览器的功能,因此它 ...

  9. Chrome handless无界面浏览器的脚本操作

    1.什么是Phantomjs (已经停止更新) 是一个无界面的浏览器 支持页面元素查找,js的执行等 由于不进行css和gui渲染,运行效率要比真实的浏览器要快很多 2.如何使用Phantomjs? ...

随机推荐

  1. 一些笔试题(C/C++)

    1.there are two variables, don't use if.. else or ?: or switch or other judgement statements,find ou ...

  2. FFMpeg 滤镜中英文对照

    FFMpeg ver 20160213-git-588e2e3 滤镜中英文对照 2016.02.17 by 1CM T.. = Timeline support 支持时间轴 .S. = Slice t ...

  3. springMVC配置文件位置及名称

    在web.xml文件内配置springMVC的DispatcherServlet的那个servlet内添加 <servlet> <servlet-name>mvc</se ...

  4. sql语句全集

    --删除外键alter table AdItem drop constraint AdOrder_AdItem_FK1(外键名称) --增加外键alter table AdItem add const ...

  5. NetBeans常用快捷键

    Ctrl+Space:代码自动完成,在Windows下通常与输入法切换有冲突,我改成了ALT+2: Ctrl+/:注释&取消注释: Alt+Shift+F:编辑器自动格式,由于三个组合键不好按 ...

  6. Effective C++ -----条款06:若不想使用编译器自动生成的函数,就该明确拒绝

    为驳回编译器自动提供的功能,可将相应的成员函数声明为private并且不予实现. 使用像Uncopyable这样的base class也是一种做法(即先声明一个基类,然后私有继承它).这其实有点像使用 ...

  7. nyoj_148_fibonacci数列(二)_矩阵快速幂

    fibonacci数列(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 In the Fibonacci integer sequence, F0 = 0, F ...

  8. 2076 Problem F Quick Brown Fox

    题目描述 A pangram is a phrase that includes at least one occurrence of each of the 26 letters, ‘a’. . . ...

  9. 【leetcode】Remove Duplicates from Sorted List (easy)

    Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...

  10. 【leetcode】Word Search II(hard)★

    Given a 2D board and a list of words from the dictionary, find all words in the board. Each word mus ...