新建一个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 ...
随机推荐
- MVVM架构~knockoutjs系列之正则表达式使规则更灵活
返回目录 几乎每种验证架构都会有正则表达式的加盟,一般地,一种验证架构首先会提供一些标准的,常用的验证规则,它们通常是数字验证,电话验证,email验证,长度验证,范围验证,日期验证等,而如果使你的验 ...
- struts2学习笔记之六:struts2的Action访问ServletAPI的几种方式
方法一:通过ActionContext访问SerlvetAPI,这种方式没有侵入性 Action类部分代码 import com.opensymphony.xwork2.ActionContext; ...
- java 线程安全 Lock
java.util.concurrent.locks 对于线程安全我们前面使用了synchronized关键字,对于线程的协作我们使用Object.wait()和Object.notify().在JD ...
- JDBC操作数据库,第一:jsp插入mysql数据库,坎坷摸索分享
JSP连接数据库,坎坷摸索了好久,现在终于做好了,分享一下,希望对更多热爱编程学习的人有所帮助!!!谢谢 第一:首先准备的就是已经安装好Mysql,这里不做多叙述,百度可以做到. 然后在mysql数据 ...
- angularJS自定义那些事
angularJS在数据处理方面很优秀. 使用angularJ给我感觉就像在写模板,然后对模板填入内容,只是这些内容不在是 在html页面编写,而是以数据的方式添加进去,这个也大大提高了编写的效率. ...
- 深入理解PHP内核(六)哈希表以及PHP的哈希表实现
原文链接:http://www.orlion.ga/241/ 一.哈希表(HashTable) 大部分动态语言的实现中都使用了哈希表,哈希表是一种通过哈希函数,将特定的键映射到特定值得一种数据 结构, ...
- struts2拦截器
一.自定义拦截器 struts2拦截器类似于servlet过滤器 首先定义一个拦截器这个拦截器实现了Interceptor接口: package cn.orlion.interceptor; impo ...
- C# 索引器使用总结
1.索引器(Indexer): 索引器允许类或者结构的实例按照与数组相同的方式进行索引.索引器类似于属性,不同之处在于他们的访问采用参数. 最简单的索引器的使用 /// <summary> ...
- 设置国内的centos 7 yum源
本人在帝都,觉得首都在线(yun-idc.com)的yum源速度不错,故选它了.具体操作方法是将以下文件保存到 /etc/yum.repos.d/yun-idc.repo 即可. [base] nam ...
- Sybase 数据库新增用户,赋权
Sybase数据库, 需求:新增用户user1,赋予对原数据库中表t_jingyu的查询权限 数据库原用户登陆 isql -U用户 -P密码 -S服务名 sp_addlogin 'user1','us ...