新建一个CContact类用于存放联系人信息,下面是该类的代码:

CContact.h代码:

01 #import <Foundation/Foundation.h>
02  
03  
04 @interface CContact : NSObject
05  
06 @property (nonatomic,strong) NSString * firstName;
07 @property (nonatomic,strong) NSString * lastName;
08 @property (nonatomic,strong) NSString * compositeName;
09 @property (nonatomic,strong) UIImage * image;
10 @property (nonatomic,strong) NSMutableDictionary * phoneInfo;
11 @property (nonatomic,strong) NSMutableDictionary * emailInfo;
12 @property (nonatomic,assign) int recordID;
13 @property (nonatomic,assign) int sectionNumber;
14  
15  
16 //-(NSString *)getFirstName;
17 //-(NSString *)getLastName;
18 -(NSString *)getFisrtLetterForCompositeName;
19  
20 @end

CContact.m文件代码:

01 //
02 //  CContact.m
03 //  Contact
04 //
05 //  Created by Carl on 13-6-28.
06 //  Copyright (c) 2013年 contact..com. All rights reserved.
07 //
08  
09 #import "CContact.h"
10 #import "pinyin.h"
11  
12 @implementation CContact
13  
14 -(void)dealloc
15 {
16     [_firstName release];
17     [_lastName release];
18     [_compositeName release];
19     [_image release];
20     [_phoneInfo release];
21     [_emailInfo release];
22      
23  
24     _recordID = nil;
25     _firstName = nil;
26     _lastName = nil;
27     _compositeName = nil;
28     _image = nil;
29     _phoneInfo = nil;
30     _emailInfo = nil;
31      
32     [super dealloc];
33 }
34  
35  
36 -(NSMutableDictionary *)phoneInfo
37 {
38     if(_phoneInfo == nil)
39     {
40         _phoneInfo = [[NSMutableDictionary alloc] init];
41     }
42      
43     return _phoneInfo;
44 }
45  
46  
47 -(NSMutableDictionary *)emailInfo
48 {
49     if(_emailInfo == nil)
50     {
51         _emailInfo = [[NSMutableDictionary alloc] init];
52     }
53     return  _emailInfo;
54 }
55  
56  
57  
58 @end

下面是一个自定义函数,用于取得所有联系人信息。

001 //取得所有的联系人
002 -(NSMutableArray *)allContacts
003 {
004      
005      
006      
007      
008     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
009  
010     NSArray * contacts = (NSArray *)ABAddressBookCopyArrayOfAllPeople(self.addressBook);
011      
012      
013 //    if([_allContacts retainCount] > 0) [_allContacts release];
014      
015     _allContacts = [[NSMutableArray alloc] init];
016      
017      
018     int contactsCount = [contacts count];
019      
020     for(int i = 0; i < contactsCount; i++)
021     {
022         ABRecordRef record = (ABRecordRef)[contacts objectAtIndex:i];
023         CContact * contact = [[CContact alloc] init];
024         //取得姓名
025         CFStringRef  firstNameRef =  ABRecordCopyValue(record, kABPersonFirstNameProperty);
026         contact.firstName = (NSString *)firstNameRef;
027         CFStringRef lastNameRef = ABRecordCopyValue(record, kABPersonLastNameProperty);
028         contact.lastName = (NSString *)lastNameRef;
029         CFStringRef compositeNameRef = ABRecordCopyCompositeName(record);
030         contact.compositeName = (NSString *)compositeNameRef;
031          
032         firstNameRef != NULL ? CFRelease(firstNameRef) : NULL;
033         lastNameRef != NULL ? CFRelease(lastNameRef) : NULL;
034         compositeNameRef != NULL ? CFRelease(compositeNameRef) : NULL;
035  
036         //取得联系人的ID
037         contact.recordID = (int)ABRecordGetRecordID(record);
038         
039          
040          
041         //联系人头像
042         if(ABPersonHasImageData(record))
043         {
044 //            NSData * imageData = ( NSData *)ABPersonCopyImageData(record);
045             NSData * imageData = (NSData *)ABPersonCopyImageDataWithFormat(record,kABPersonImageFormatThumbnail);
046             UIImage * image = [[UIImage alloc] initWithData:imageData];
047              
048             [imageData release];
049              
050             contact.image = image;
051              
052             [image release];
053         
054         }
055          
056          
057         //处理联系人电话号码
058         ABMultiValueRef  phones = ABRecordCopyValue(record, kABPersonPhoneProperty);
059         for(int i = 0; i < ABMultiValueGetCount(phones); i++)
060         {
061              
062             CFStringRef phoneLabelRef = ABMultiValueCopyLabelAtIndex(phones, i);
063             CFStringRef localizedPhoneLabelRef = ABAddressBookCopyLocalizedLabel(phoneLabelRef);
064             CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(phones, i);
065  
066             NSString * localizedPhoneLabel = (NSString *) localizedPhoneLabelRef;
067             NSString * phoneNumber = (NSString *)phoneNumberRef;
068              
069             [contact.phoneInfo setValue:phoneNumber forKey:localizedPhoneLabel];
070              
071             //释放内存
072             phoneLabelRef == NULL ? : CFRelease(phoneLabelRef);
073             localizedPhoneLabelRef == NULL ? : CFRelease(localizedPhoneLabelRef);
074             phoneNumberRef == NULL ? : CFRelease(phoneNumberRef);
075              
076         }
077         if(phones != NULL) CFRelease(phones);
078          
079         //处理联系人邮箱
080         ABMultiValueRef emails = ABRecordCopyValue(record, kABPersonEmailProperty);
081         for(int i = 0; i < ABMultiValueGetCount(emails); i++)
082         {
083              
084             CFStringRef emailLabelRef = ABMultiValueCopyLabelAtIndex(emails, i);
085             CFStringRef localizedEmailLabelRef = ABAddressBookCopyLocalizedLabel(emailLabelRef);
086             CFStringRef emailRef = ABMultiValueCopyValueAtIndex(emails, i);
087              
088             NSString * localizedEmailLabel = ( NSString *)localizedEmailLabelRef;
089              
090             NSString * email = (NSString *)emailRef;
091              
092             [contact.emailInfo setValue:email forKey:localizedEmailLabel];
093              
094             emailLabelRef == NULL ? : CFRelease(emailLabelRef);
095             localizedEmailLabel == NULL ? : CFRelease(localizedEmailLabelRef);
096             emailRef == NULL ? : CFRelease(emailRef);
097              
098         }
099         if(emails != NULL) CFRelease(emails);
100          
101          
102         [_allContacts addObject:contact];
103         [contact release];
104         CFRelease(record);
105          
106     }
107  
108     [pool drain];   
109     return [_allContacts autorelease];
110      
111 }

iOS取得AddressBook联系人信息的更多相关文章

  1. iOS访问通讯录开发-读取联系人信息

    读取通信录中的联系人一般的过程是先查找联系人记录,然后再访问记录的属性,属性又可以分为单值属性和多值属性.通过下面例子介绍联系人的查询,以及单值属性和多值属性的访问,还有读取联系人中的图片数据. 本案 ...

  2. iOS获取通讯录所有联系人信息

    以下是2种方式: 第一种方法: GetAddressBook.h #import <Foundation/Foundation.h> @interface GetAddressBook : ...

  3. IOS 获取通讯录中信息

    获取通讯录中信息 一. 我们设置一个ABAddressBookRef类型的属性addressBook. 二. 要获得通讯录中的信息,我们需要获取访问通讯录的权限. 在运行下面的获取权限的方法的时候,系 ...

  4. Expo大作战(三十九)--expo sdk api之 DocumentPicker,Contacts(获取手机联系人信息),Branch

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  5. Android 手机卫士--获取联系人信息并显示与回显

    前面的文章已经实现相关的布局,本文接着进行相关的功能实现 本文地址:http://www.cnblogs.com/wuyudong/p/5951794.html,转载请注明出处. 读取系统联系人 当点 ...

  6. android之读取联系人信息

    联系人信息被存放在一个contacts2.db的数据库中 主要的两张表 读取联系人 读取联系人需要知道联系人内容提供者的地址,以及对应的操作对象.一般情况下操作对象是的命名方式和表明是一致的. 布局文 ...

  7. 无废话Android之内容观察者ContentObserver、获取和保存系统的联系人信息、网络图片查看器、网络html查看器、使用异步框架Android-Async-Http(4)

    1.内容观察者ContentObserver 如果ContentProvider的访问者需要知道ContentProvider中的数据发生了变化,可以在ContentProvider 发生数据变化时调 ...

  8. php课程---练习(联系人信息表)

    做一个联系人表,实现增删改功能 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...

  9. Android项目——读取手机联系人信息

    加入读取联系人信息的权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> cont ...

随机推荐

  1. EF架构~在T4模版中为所有属性加默认值

    回到目录 在项目开发过程中,出现了一个问题,就是新添加一个非空字段后,原来的程序逻辑需要被重新修改,即将原来的字段添加到程序里,这种作法是非常不提倡的,所以,我通过T4模版将原来的实体类小作修改,解决 ...

  2. Atitit  图像处理底色变红的解决

    Atitit  图像处理底色变红的解决 1.1. 原因  ImageIO  bug ,alpha通道应该在保存jpg的时候排除1 1.2. 解决,自己移除alpha通道即可1 2. Image sav ...

  3. iOS-数据持久化-偏好设置

    一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用都有个NSUserDefaults实例,通过它来存取偏 ...

  4. java连接数据库的模糊查询

    1:模糊查询是比较常见的一种查询方式,例如在订单表中,包含有订单的具体日期.如果要查询某年某月的订单信息,最好的方式就是使用模糊查询.进行模糊查询需要使用关键字LIKE.在使用LIKE关键字进行模糊查 ...

  5. Django的Model上都有些什么

    Django的Model上都有些什么 modelinfo= ['DoesNotExist', 'MultipleObjectsReturned', '__class__', '__delattr__' ...

  6. HTTP学习三:HTTPS

    HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...

  7. JavaScript实现DDoS攻击原理,以及保护措施。

    DDos介绍 最普遍的攻击是对网站进行分布式拒绝服务(DDoS)攻击.在一个典型的DDoS攻击中,攻击者通过发送大量的数据到服务器,占用服务资源.从而达到阻止其他用户的访问. 如果黑客使用JavaSc ...

  8. 在ssh中利用Solr服务建立的界面化站内搜索---solr2

         继上次匆匆搭建起结合solr和nutch的所谓站内搜索引擎之后,虽当时心中兴奋不已,可是看了看百度,再只能看看我的控制台的打印出每个索引项的几行文字,哦,好像差距还是有点大……        ...

  9. 【圣诞特献】Web 前端开发精华文章推荐【系列二十一】

    <Web 前端开发精华文章推荐>2013年第九期(总第二十一期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和  ...

  10. T-SQL中jion操作

    --创建学生表 create table Students( sno nvarchar(10) not null primary key, name nvarchar(30) not null, ge ...