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. http apr 8080 exec 3解决

    IDEA运行tomcat,总是出现这个错误. 解决: 在tomcat的配置里,加上下面这句话: -Xms256m -Xmx512m -XX:MaxNewSize=64m -XX:MaxPermSize ...

  2. svn迁移到git仓库并保留commit历史记录

    svn迁移到git仓库并保留commit历史记录 最近在做svn迁移到gitlab,由于之前一直是由svn做版本控制.最简单的方式是将svn的内容export出来,然后添加到gitlab即可.但是,如 ...

  3. ffmpeg-20160718-git-bin.7z

    官方 2016-07-18 发布的bin,彻底不支持 xp. ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] + ...

  4. 数据库SQL语句

    增删改查 --增加 create INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) --删除 delete DELETE FROM 表名 ...

  5. codeforces 495A. Digital Counter 解题报告

    题目链接:http://codeforces.com/problemset/problem/495/A 这个题目意思好绕好绕~~好绕~~~~~,昨天早上做得 virtual 看不懂,晚上继续看还是,差 ...

  6. 51nod 1449 砝码称重(贪心算法)

    题目:传送门. 题意:中文题. 题解:左物右码,w进制.m%w==0||m%w==1||m%w==w-1都是可以的,否则是NO. #include <iostream> #include ...

  7. ajax,下拉框级联

    js代码: $(document).ready(function() { $("#type1").change(function(){ var type1Code=$(" ...

  8. IOS - 真机测试

    转:版权声明:本文由本人亲自一步步完成,并细心排版生成,望广大同仁尊重一下本人的劳动成果,转载请注明出处,原文地址http://my.oschina.net/joanfen/blog/167730 一 ...

  9. storyboard pushViewController 的时候,新的界面黑屏

    storyboard 创建的一级界面需要通过代码跳转到另一 storyboard 创建的界面的时候,通常我们会这样 其实 alloc init 相当于重新创建一个界面,所以我们 push 进入之后会发 ...

  10. 利用颜色生成UIImage

    //  颜色转换为背景图片 + (UIImage *)imageWithColor:(UIColor *)color { CGRect rect = CGRectMake(0.0f, 0.0f, 1. ...