#import <Foundation/Foundation.h>

@interface LoadingContactData : NSObject

// 读取通讯录
+ (LoadingContactData *)shareIntance; - (void)getContactData; @end #import "LoadingContactData.h" static LoadingContactData *_contactData; @implementation LoadingContactData + (LoadingContactData *)shareIntance
{
if (_contactData == nil) {
_contactData = [[LoadingContactData alloc]init];
}
return _contactData;
} - (void)getContactData
{
CFErrorRef error = NULL; ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
if (addressBook) {
NSArray *allContacts = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
NSMutableArray *contactsArray = [NSMutableArray new]; for (NSUInteger i = ; i<[allContacts count]; i++)
{
ABRecordRef contactPerson = (__bridge ABRecordRef)allContacts[i]; // Get mobile number
ABMultiValueRef phonesRef = ABRecordCopyValue(contactPerson, kABPersonPhoneProperty);
NSMutableArray *telephoneArray = [self getMobilePhoneProperty:phonesRef]; [telephoneArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { THContact *contact = [[THContact alloc] init]; // Get first and last names and fullName
NSString *firstName = (__bridge_transfer NSString*)ABRecordCopyValue(contactPerson, kABPersonFirstNameProperty);
NSString *lastName = (__bridge_transfer NSString*)ABRecordCopyValue(contactPerson, kABPersonLastNameProperty);
NSString *fullName = (__bridge_transfer NSString *)ABRecordCopyCompositeName(contactPerson); // Set Contact properties
contact.firstName = firstName;
contact.lastName = lastName; if (fullName != nil){
contact.fullName = fullName;
}
else if(firstName != nil && lastName != nil) {
contact.fullName = [NSString stringWithFormat:@"%@%@",lastName,firstName];
} else if (firstName != nil) {
contact.fullName = firstName;
} else if (lastName != nil) {
contact.fullName = lastName;
} else {
contact.fullName = @"";
} // Get image if it exists
NSData * imgData = (__bridge_transfer NSData *)ABPersonCopyImageDataWithFormat(contactPerson,kABPersonImageFormatThumbnail); // 联系人头像(裁剪后的)
//NSData *imgData = (__bridge_transfer NSData *)ABPersonCopyImageData(contactPerson); // 联系人头像原图
UIImage *userImg = [UIImage imageWithData:imgData];
contact.image = userImg; if (!contact.image) {
contact.image = MF_PngWithSkin(DEFAULTS_SKIN, @"icon-avatar.png");
} contact.phone = [obj telephoneWithReformat]; if ([Unity validateMobile:contact.phone]) {
contact.recordId = ABRecordGetRecordID(contactPerson)+ [[contact.phone substringWithRange:NSMakeRange(, )] integerValue]+idx;
[contactsArray addObject:contact];
} }]; if(phonesRef) {
CFRelease(phonesRef);
} } [[ContactDataArray shareContactData] setContactDataArray:contactsArray]; if(addressBook) {
CFRelease(addressBook);
}
}
else
{
NSLog(@"Error"); }
} - (NSMutableArray *)getMobilePhoneProperty:(ABMultiValueRef)phonesRef
{
NSMutableArray *dataArray = [[NSMutableArray alloc]init];
for (int i=; i < ABMultiValueGetCount(phonesRef); i++) { CFStringRef currentPhoneValue = ABMultiValueCopyValueAtIndex(phonesRef, i);
NSString *phone = (__bridge NSString *)currentPhoneValue;
[dataArray addObject:phone];
} return dataArray;
} @end

ios 读取通讯录数据的更多相关文章

  1. ios读取通讯录信息

    ios读取通讯录信息 (2012-05-22 14:07:11) 标签: ios读取通讯录 it   iphone如许app读取通讯录信息,读取通讯录信息时需要加载AddressBookUI 和Add ...

  2. 利用AddressBook.framework框架获取iOS系统通讯录数据

    此方法是使用AddressBook.framework框架获取通讯录信息 第一步.在info.plist文件里面配置访问权限 第二步.导入头文件 #import <AddressBook/Add ...

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

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

  4. ios 向sqlite数据库插入和读取图片数据

    向sqlite数据库插入和读取图片数据 (for ios) 假定数据库中存在表 test_table(name,image), 下面代码将图片文件test.png的二进制数据写到sqlite数据库: ...

  5. iOS彩票项目--第七天,初次读取json数据、KVC转模型技巧、运行时字典转模型以及初步对显示网页的操作并且跟踪标签

    一.初次读取json数据 二.KVC转模型技巧,这里的技巧主要解决的是字典中的key 与 模型中有的属性对应不起来的时候 的解决办法 <方法1> <方法2>运行时字典转模型,运 ...

  6. iOS 获得通讯录中联系人的所有属性--b

    ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef results = ABAddressBookCopyArrayOfA ...

  7. iOS有关通讯录操作

    一.首先获取用户通讯录授权信息. 在AppDelegate中导入#import <AddressBook/AddressBook.h>框架,在下列方法中获取授权信息. - (BOOL)ap ...

  8. iOS开发系列--数据存取

    概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...

  9. iOS - OC PList 数据存储

    前言 直接将数据写在代码里面,不是一种合理的做法.如果数据经常改,就要经常翻开对应的代码进行修改,造成代码扩展性低.因此,可以考虑将经常变的数据放在文件中进行存储,程序启动后从文件中读取最新的数据.如 ...

随机推荐

  1. C语言--返回局部变量的地址

    我们可能会经常写出这样的代码: int  add(int  a , int  b) { return  a + b; } 当然,这是合理的写法,使函数的返回值为 int ,所以,调用函数后会返回一个i ...

  2. python - 消息队列

    消息队列分类 1.先进先出 2.后进先出 3.优先级队列 4.双向队列 1.先进先出 import queue q = queue.Queue(2) #队列最大长度 q.put(11) q.put(2 ...

  3. 转载: Javah生成JNI头文件出现找不到类的错误

    错误: 找不到 'com.chnic.jni.SayHellotoCPP' 的类文件. 上图可以看到错误和解决办法. 不要忘记那个点 javah -classpath . -jni com.chnic ...

  4. 2.IKAnalyzer 中文分词器配置和使用

    一.配置 IKAnalyzer 中文分词器配置,简单,超简单. IKAnalyzer 中文分词器下载,注意版本问题,貌似出现向下不兼容的问题,solr的客户端界面Logging会提示错误. 给出我配置 ...

  5. 理解SQL SERVER中的分区表(转)

    简介 分区表是在SQL SERVER2005之后的版本引入的特性.这个特性允许把逻辑上的一个表在物理上分为很多部分.而对于SQL SERVER2005之前版本,所谓的分区表仅仅是分布式视图,也就是多个 ...

  6. MessageDigest 类

    MessageDigest 类    MessageDigest 类是一个引擎类,它是为了提供诸如 SHA1 或 MD5 等密码上安全的报文摘要功能而设计的.密码上安全的报文摘要可接受任意大小的输入( ...

  7. Oracle异常的抛出处理

    --一异常处理的代码 --sqlcode 异常编号 --sqlerrm 信号字符串 /* 在plsql 块中格式 Declare 变量 Begin 代码块 EXCEPTION when 异常的名称 t ...

  8. dispatch_async 与 dispatch_get_global_queue 的使用方法

    GCD (Grand Central Dispatch) 是Apple公司开发的一种技术,它旨在优化多核环境中的并发操作并取代传统多线程的编程模式. 在Mac OS X 10.6和IOS 4.0之后开 ...

  9. JAVA 对象引用,以及对象赋值(转)

    原文链接:http://zwmf.iteye.com/blog/1738574 关键字: java对象 引用 Java对象及其引用 关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里 ...

  10. js中的function

    Math方法详解 Math.sqrt(x)    计算X开平方 Math.sqrt(x,y)   计算xy Math.round(x)   计算x 四舍五入的值 getBoundingClientRe ...