iOS电话簿导入代码

iOS电话簿导入代码,当前仅仅实现主体框框程序,细节续订;Analysis不会导致内存泄漏

引用

#import <AddressBook/AddressBook.h>
#import
<AddressBookUI/AddressBookUI.h>

代码调试:XCode4.5,iOS6.0

主体代码


- (void)testAddress
{
ABAddressBookRef addressBook = nil;

if ([[UIDevice currentDevice].systemVersion floatValue] >= 6.0)
{
addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
//等待同意后向下执行
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error)
{
dispatch_semaphore_signal(sema);
});

dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
dispatch_release(sema);
}
// else
// {
// addressBook = ABAddressBookCreate();
// }

CFArrayRef results = ABAddressBookCopyArrayOfAllPeople(addressBook);

NSLog(@"%@" ,results);

int peopleCount = CFArrayGetCount(results);

for (int i=0; i<peopleCount; i++)
{
ABRecordRef record = CFArrayGetValueAtIndex(results, i);

NSLog(@"%@" ,record);

NSString *fn,*ln,*fullname;
fn = ln = fullname = nil;

CFTypeRef vtmp = NULL;

vtmp = ABRecordCopyValue(record, kABPersonFirstNameProperty);
if (vtmp)
{
fn = [NSString stringWithString:vtmp];

CFRelease(vtmp);
vtmp = NULL;
}
vtmp = ABRecordCopyValue(record, kABPersonLastNameProperty);
if (vtmp)
{
ln = [NSString stringWithString:vtmp];

CFRelease(vtmp);
vtmp = NULL;
}

NSLog(@"%@ ,%@" ,fn ,ln);

// 读取电话
ABMultiValueRef phones = ABRecordCopyValue(record, kABPersonPhoneProperty);
int phoneCount = ABMultiValueGetCount(phones);

for (int j=0; j<phoneCount; j++)
{
// label
CFStringRef lable = ABMultiValueCopyLabelAtIndex(phones, j);
// phone number
CFStringRef phonenumber = ABMultiValueCopyValueAtIndex(phones, j);

// localize label
CFStringRef ll = ABAddressBookCopyLocalizedLabel(lable);

NSLog(@"\t%@ ,%@,%@" ,(NSString *)lable ,(NSString *)ll,(NSString *)phonenumber);

if (ll)
CFRelease(ll);
if (lable)
CFRelease(lable);
if (phonenumber)
CFRelease(phonenumber);
}

if (phones)
CFRelease(phones);

record = NULL;
}

if (results)
CFRelease(results);
results = nil;

if (addressBook)
CFRelease(addressBook);
addressBook = NULL;
}

转至:http://www.cnblogs.com/GoGoagg/archive/2012/12/20/2826804.html

时间: 2024-10-23 09:11:21

iOS电话簿导入代码的相关文章

iOS开发 纯代码创建UICollectionView

转:http://jingyan.baidu.com/article/eb9f7b6d8a81a5869364e8a6.html iOS开发 纯代码创建UICollectionView 习惯了使用xib和StoryBoard创建UICollectionView项目工程的伙伴,需要转换使用纯代码来实现,想避免碰更多的壁,就需要认真了解创建UICollectionView过程了.创建UICollectionView比创建UITableView更加复杂,初始化方式也是相对奇特.以下是使用纯代码创建UI

iOS 测试用代码

//测试图片能否显示 -(void)showMyimgview { UIImageView *backgroundImg=[[UIImageView alloc]init]; backgroundImg.frame =CGRectMake(50, 200, 200, 100); backgroundImg.image=[UIImage imageNamed:@"navbar"]; [self.view addSubview:backgroundImg]; [backgroundImg

iOS 7 :代码解决ViewController的View整体上移的问题

解决iOS7视图控制器的View整体上移20个像素 当我们在使用Xcode5创建一个新的项目的时候,我们会发现之前运行在iOS6上面的App整体的视图都向上移动了20个像素点,因为 iOS 7 把整个屏幕高度(包括状态栏和导航栏)都作为了视图控制器的有效高度,于是iOS6上的控制器视图和上面的状态栏交叠在一起了. 关于这个问题,我们的解决方法: 苹果在升级到ios7的时候已经考虑到控制器视图整体上移的这个问题,于是就在iOS7 SDK中为视图控制器添加了一个新的属性edgesForExtende

另辟蹊径创建移动应用:iOS和Android代码共享

过去几年,移动应用席卷了整个世界,在工作和生活的方方面面改变着我们使用互联网的方式.创建移动应用的各种技术也随之兴起,各种开发流程也 将移动应用视为一等公民,开始考虑适应移动开发的流程.尽管已经让人感觉无处不在,真正的移动应用时代才刚刚开始.我们即将面对新一代的移动设备,如可穿戴设备或组成物联网的各种各样的移动装置.我们将面临全新的用于数据展示和命令接收的用户交互接口.我们也认识到越来越多的公司将真正采取移动优先的战 略.所有的这些都将对我们未来几年设计.开发和测试软件的方式产生巨大影响. 在苹

iOS编写质量代码

这是一篇读书笔记,快速记录各种高效率编程的技巧和方法.这些方法是为了提升编码质量和效率,高质量代码利于后期的维护和更新,毕竟不能一份代码到永远. 由于是记录形式,当然不能把整篇内容都写下来,只记录关键性的内容,长期更新. 正文 Objective-C使用了消息机制代替调用方法. 区别:使用消息结构的语言,其运行时缩影执行的代码由运行环境来决定.而使用函数调用的语言,则又编译器决定. 头文件中少引用其他文件 在头文件中使用@Class 代替直接引用其他头文件 多使用字面量语法     NSNumb

iOS 项目导入js文件

一.iOS项目中导入js文件 一般情况下把js文件添加到项目中通常会直接copy到项目中(拖拽),这里的js文件可能只有一个层级(一个文件夹包含所有的js文件),也有可能分很多文件夹,将js文件导入项目的时候可以直接拖拽到项目中文件夹,项目会提示文件copy,如下图1-1所示.这里需要选择Create folder references 这样文件夹显示蓝色,如图1-2所示.如果选择Create groups创建,在项目运行的时候编译js文件,如果js文件只在同一个文件夹内运行是成功的,但是如果是

实时显示iOS编写UI代码效果

编写iOS应用UI的方式大概有两种,一种是Storyboard/Xib,另一种是手写代码.采用Storyboard/Xib方式组织UI,由于提供可视化的特性,只要从UI库中拖动UI控件,便可以显示结果,极大地提高开发速度.但面临一个问题就是多人协作开发,由于所有的UI都放在同一个Storyboard文件中,使用Git/SVN合并代码就会出现冲突.多人协作开发还不是主要问题,有人提出可以创建多个Storyboard来分开UI编写,而Storyboard/Xib最主要问题是代码复用性比较差.所以有些

iOS设计模式(代码分析系列2:简单工厂模式)

简单工厂模式示例代码下载地址, 1.简述 首先需要说明一下,简单工厂模式不属于23种GOF设计模式之一.它也称作静态工作方法模式,是工厂方法模式的特殊实现(也就是说工厂模式包含简单工厂模式).这里对简单工厂模式进行介绍,是为后面的工厂方法和抽象工厂模式做一个引子. 2.定义 "专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类." 世界上就是由一个工厂类,根据传入的参数,动态地决定创建出哪一个产品类的实例. 3.结构图 简要分析结构图: ConcreteProduct

IOS中Objective-C代码及命名规范

想做一名ios开发工程师,代码命名不规范是一种不专业的表现,因为ios开发工程师们学出来的代码会给很多人看,为了使代码清晰简洁,方便阅读理解,都会统一遵从一定的代码规范,Objective-C同样如此. 简单总结一下目前接触到的: 1.代码行度最大为100列(C++的是80) 2.声明类或方法时,注意空格的使用,参数过多时可换行保持对齐,调用方法时也是如此,参数都写在一行或换行冒号对齐. 3.命名规则 类名首字母大写,方法首字母小写,方法中的参数首字母小写,同时尽量让方法的命名读起来像一句话,能