新建一个CContact类用于存放联系人信息,下面是该类的代码:
CContact.h代码:
01 |
#import <Foundation/Foundation.h> |
04 |
@interface CContact : NSObject |
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; |
16 |
//-(NSString *)getFirstName; |
17 |
//-(NSString *)getLastName; |
18 |
-(NSString *)getFisrtLetterForCompositeName; |
CContact.m文件代码:
05 |
// Created by Carl on 13-6-28. |
06 |
// Copyright (c) 2013年 contact..com. All rights reserved. |
12 |
@implementation CContact |
18 |
[_compositeName release]; |
36 |
-(NSMutableDictionary *)phoneInfo |
40 |
_phoneInfo = [[NSMutableDictionary alloc] init]; |
47 |
-(NSMutableDictionary *)emailInfo |
51 |
_emailInfo = [[NSMutableDictionary alloc] init]; |
下面是一个自定义函数,用于取得所有联系人信息。
002 |
-(NSMutableArray *)allContacts |
008 |
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; |
010 |
NSArray * contacts = (NSArray *)ABAddressBookCopyArrayOfAllPeople(self.addressBook); |
013 |
// if([_allContacts retainCount] > 0) [_allContacts release]; |
015 |
_allContacts = [[NSMutableArray alloc] init]; |
018 |
int contactsCount = [contacts count]; |
020 |
for(int i = 0; i < contactsCount; i++) |
022 |
ABRecordRef record = (ABRecordRef)[contacts objectAtIndex:i]; |
023 |
CContact * contact = [[CContact alloc] init]; |
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; |
032 |
firstNameRef != NULL ? CFRelease(firstNameRef) : NULL; |
033 |
lastNameRef != NULL ? CFRelease(lastNameRef) : NULL; |
034 |
compositeNameRef != NULL ? CFRelease(compositeNameRef) : NULL; |
037 |
contact.recordID = (int)ABRecordGetRecordID(record); |
042 |
if(ABPersonHasImageData(record)) |
044 |
// NSData * imageData = ( NSData *)ABPersonCopyImageData(record); |
045 |
NSData * imageData = (NSData *)ABPersonCopyImageDataWithFormat(record,kABPersonImageFormatThumbnail); |
046 |
UIImage * image = [[UIImage alloc] initWithData:imageData]; |
050 |
contact.image = image; |
058 |
ABMultiValueRef phones = ABRecordCopyValue(record, kABPersonPhoneProperty); |
059 |
for(int i = 0; i < ABMultiValueGetCount(phones); i++) |
062 |
CFStringRef phoneLabelRef = ABMultiValueCopyLabelAtIndex(phones, i); |
063 |
CFStringRef localizedPhoneLabelRef = ABAddressBookCopyLocalizedLabel(phoneLabelRef); |
064 |
CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(phones, i); |
066 |
NSString * localizedPhoneLabel = (NSString *) localizedPhoneLabelRef; |
067 |
NSString * phoneNumber = (NSString *)phoneNumberRef; |
069 |
[contact.phoneInfo setValue:phoneNumber forKey:localizedPhoneLabel]; |
072 |
phoneLabelRef == NULL ? : CFRelease(phoneLabelRef); |
073 |
localizedPhoneLabelRef == NULL ? : CFRelease(localizedPhoneLabelRef); |
074 |
phoneNumberRef == NULL ? : CFRelease(phoneNumberRef); |
077 |
if(phones != NULL) CFRelease(phones); |
080 |
ABMultiValueRef emails = ABRecordCopyValue(record, kABPersonEmailProperty); |
081 |
for(int i = 0; i < ABMultiValueGetCount(emails); i++) |
084 |
CFStringRef emailLabelRef = ABMultiValueCopyLabelAtIndex(emails, i); |
085 |
CFStringRef localizedEmailLabelRef = ABAddressBookCopyLocalizedLabel(emailLabelRef); |
086 |
CFStringRef emailRef = ABMultiValueCopyValueAtIndex(emails, i); |
088 |
NSString * localizedEmailLabel = ( NSString *)localizedEmailLabelRef; |
090 |
NSString * email = (NSString *)emailRef; |
092 |
[contact.emailInfo setValue:email forKey:localizedEmailLabel]; |
094 |
emailLabelRef == NULL ? : CFRelease(emailLabelRef); |
095 |
localizedEmailLabel == NULL ? : CFRelease(localizedEmailLabelRef); |
096 |
emailRef == NULL ? : CFRelease(emailRef); |
099 |
if(emails != NULL) CFRelease(emails); |
102 |
[_allContacts addObject:contact]; |
109 |
return [_allContacts autorelease]; |
- iOS访问通讯录开发-读取联系人信息
读取通信录中的联系人一般的过程是先查找联系人记录,然后再访问记录的属性,属性又可以分为单值属性和多值属性.通过下面例子介绍联系人的查询,以及单值属性和多值属性的访问,还有读取联系人中的图片数据. 本案 ...
- iOS获取通讯录所有联系人信息
以下是2种方式: 第一种方法: GetAddressBook.h #import <Foundation/Foundation.h> @interface GetAddressBook : ...
- IOS 获取通讯录中信息
获取通讯录中信息 一. 我们设置一个ABAddressBookRef类型的属性addressBook. 二. 要获得通讯录中的信息,我们需要获取访问通讯录的权限. 在运行下面的获取权限的方法的时候,系 ...
- Expo大作战(三十九)--expo sdk api之 DocumentPicker,Contacts(获取手机联系人信息),Branch
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- Android 手机卫士--获取联系人信息并显示与回显
前面的文章已经实现相关的布局,本文接着进行相关的功能实现 本文地址:http://www.cnblogs.com/wuyudong/p/5951794.html,转载请注明出处. 读取系统联系人 当点 ...
- android之读取联系人信息
联系人信息被存放在一个contacts2.db的数据库中 主要的两张表 读取联系人 读取联系人需要知道联系人内容提供者的地址,以及对应的操作对象.一般情况下操作对象是的命名方式和表明是一致的. 布局文 ...
- 无废话Android之内容观察者ContentObserver、获取和保存系统的联系人信息、网络图片查看器、网络html查看器、使用异步框架Android-Async-Http(4)
1.内容观察者ContentObserver 如果ContentProvider的访问者需要知道ContentProvider中的数据发生了变化,可以在ContentProvider 发生数据变化时调 ...
- php课程---练习(联系人信息表)
做一个联系人表,实现增删改功能 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...
- Android项目——读取手机联系人信息
加入读取联系人信息的权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> cont ...
随机推荐
- Thinking in java中关于Exception的一道面试题.
今天看到Thinking in Java中一个关于Exception的例子:最后看到有一篇总结的比较好的文章, 这里拿来记录下, 文章地址是:http://blog.csdn.net/salerzha ...
- js 判断字符串是否包含另外一个字符串
示例代码: <script type="text/javascript"> var str = "测试一个字符串(ehtrzes)是否包含另外一个字符串&qu ...
- struts之动态方法调用改变表单action属性
一.动态方法调用(DMI:Dynamic Method Invocation) ⒈struts2中同样提供了这个包含多个逻辑业处理的Action,这样就可以在一个Action中进行多个业务逻辑处理 ...
- .NET实现Office Excel自定义公式 广泛应用于报表与数据分析
在管理软件开发的功能点中,有相当一部分功能是与Excel做数据交互,产生Excel 数据报表.如果Excel报表的数据计算方法很有规律可循,则可以通过自定义公式来解决.比如常见的资产负债表,利润表,取 ...
- QQ左侧滑动显示之自定义属性
上一篇为大家实现了最基本的侧滑效果,相信很多小伙伴已经发现一个小问题了,修改Menu右侧的宽度时,我们需要修改我们的自定义方法,这样非常不方便,下面就为大家介绍一下如何通过自定义属性来控制这个的变化. ...
- nodejs支持ssi实现include shtml页面
express 对于include的代码默认不处理,直接输出,没办法执行include的内容,但可以通过Nginx实现. 1. 配置nginx设置开启ssi模式. server { … ssi on; ...
- Java多线程系列--“JUC线程池”04之 线程池原理(三)
转载请注明出处:http://www.cnblogs.com/skywang12345/p/3509960.html 本章介绍线程池的生命周期.在"Java多线程系列--“基础篇”01之 基 ...
- tomcat实现ServletContext的addListener方法的源码解说(原创)
tomcat 8.0.36 知识点: 动态监听器有七类: ServletContextAttributeListener ServletRequestListener ServletRequestAt ...
- MongoDB的学习--explain()和hint()
Explain 从之前的文章中,我们可以知道explain()能够提供大量与查询相关的信息.对于速度比较慢的查询来说,这是最重要的诊断工具之一.通过查看一个查询的explain()输出信息,可以知道查 ...
- 帮助你提高排版技巧的18个 PS 文字特效教程
Photoshop 文字特效教程对于学习基础的和高级的排版思维有很大的帮助.在这篇文章中,你会发现一组最新发布的文字效果教程.这些高品质的 Photoshop 教程可以帮助你设计出惊人的2D,3D,木 ...