新建一个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 ...
随机推荐
- 为什么Java方法里面不能再嵌套方法?
直接原因: 这是Java基本语法定义的,方法中不可以再次声明方法,只能调用其他的方法. 个人理解: 1.方法栈是需要一个载体的,这个载体就是Class,如果一个方法的上一级不是一个类,就说明没有载体. ...
- MySQL 5.7新特性之Generated Column(函数索引)
MySQL 5.7引入了Generated Column,这篇文章简单地介绍了Generated Column的使用方法和注意事项,为读者了解MySQL 5.7提供一个快速的.完整的教程.这篇文章围绕 ...
- Nodejs·构建web应用
本篇的内容比较多..... 1 首先是从基本的Nodejs服务方面讲述前后端统一语言在web应用中的作用: 2 然后讲了web中基本的知识,从请求方法到路由.从查询字符串到Cookie和Session ...
- struts2学习笔记之七:Result类型
一:关于Struts2的type类型,也就是Result类型,他们都实现了共同的接口Result,都实现了execute方法 他们体现了策略模式,具体Result类型参见:struts-default ...
- js高程读书笔记(1-3章)
一.js简介 js是一种专为与网页交互而设计的脚本语言,由以下三个不同的部分组成: 1.ECMAScript,由ECMA-262(它规定了语言的这些组成部分:语法,类型,语句,关键字,保留字,操作符, ...
- word-wrap: break-word; break-word: break-all;区别
word-break:break-all和word-wrap:break-word都是能使其容器如DIV的内容自动换行. 它们的区别就在于: 1,word-break:break-all 例如div宽 ...
- 为什么MVC不是一种设计模式
http://damoqiongqiu.iteye.com/blog/1949256 ---比较Backbone和Ext4.x在MVC实现上的差异 大漠穷秋 前言 圣人云:不想做妈咪的小姐不是好码农. ...
- Primer – 支撑 GitHub 的 CSS 工具包和准则
Primer 是一个 CSS 工具包,支撑着 GitHub 的前端设计.它的目的仅限于提供通用部件,为我们的开发者提供最大的灵活性,并保持 GitHub 的独特风格.它基于 SCSS 建成,可以通过 ...
- 【Android】Volley做网络请求的几种用法
前言: 最近在将自己写的烂代码重构,以前使用的网络请求全是基于apache的HttpClient,简单使用还好,使用多了发现重复代码太多,而且每次使用都很繁琐,因此在网上找了半天网络请求的相关类库,最 ...
- Windows Azure Cloud Service (1) 用户手册
<Windows Azure Platform 系列文章目录> 下载地址 Cloud Service用户手册