新建一个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 ...
随机推荐
- Redis中5种数据结构的使用场景介绍
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/108.html?1455861435 一.redis 数据结构使用场景 原 ...
- CSS的样式表基本概念
一.样式表分类 1.内联样式表 <p style="fint-size:24px;">直接在标签内部进行样式设置</style> 2.内嵌样式表 <h ...
- Fiddler实战深入研究(二)
Fiddler实战深入研究(二) 阅读目录 Fiddler不能捕获chrome的session的设置 理解数据包统计 请求重定向(AutoResponder) Composer选项卡 Filters选 ...
- POJ1014 解题报告(DFS)
题目在此:http://poj.org/problem?id=1014 要看清题意呢,题中要求输入的是价值分别为1,2,3,4,5,6的大理石的个数,而不是6块价值为输入数字的大理石!选这个题主要想练 ...
- springboot hessian
注意把hessian的依赖换成4.0.38或者把git文件里的4.0.37放到maven私服中去,推荐使用4.0.37版本.38版本存在序列化bigdecimal的问题. <dependency ...
- VS报错:_CRT_SECURE_NO_WARNINGS
常见报错:warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead ...
- 快速入门系列--深入理解C#
C#语言在近些年得到了长足的方法,代码风格越来越简洁美观,例如常用的泛型及其约束.可空类型.隐式类型.匿名类型和委托等,通过下面的表格可以对这部分相对简单的特性的使用有一个初步的了解. 特性 示例 泛 ...
- 直接修改.NET程序集 LLBL Gen 2.x-4.x 许可授权方法研究
做数据库开发,如果要用ORM,LLBL Gen是一款优秀的框架和工具,目前最新版本是4.0.同时也推出了Lite免费版本,与Visual Studio的Express版本一样, 免费,但是它仅仅只支持 ...
- Netgen mesh library : nglib
Netgen mesh library : nglib eryar@163.com 摘要Abstract:本文主是对Netgen的库nglib的用法进行介绍.主要参考资料是Netgen用户指南.最后给 ...
- photoshop学习目录
前面的话 前端工程师最基本的工作是切图.photoshop用的6不6,对于工作效率有很大的影响.小火柴将前端工程师需要掌握的photoshop的知识和技能进行了梳理和归纳,总结成以下目录 目录 前端工 ...