ios 读取通讯录数据
- #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 读取通讯录数据的更多相关文章
- ios读取通讯录信息
ios读取通讯录信息 (2012-05-22 14:07:11) 标签: ios读取通讯录 it iphone如许app读取通讯录信息,读取通讯录信息时需要加载AddressBookUI 和Add ...
- 利用AddressBook.framework框架获取iOS系统通讯录数据
此方法是使用AddressBook.framework框架获取通讯录信息 第一步.在info.plist文件里面配置访问权限 第二步.导入头文件 #import <AddressBook/Add ...
- iOS访问通讯录开发-读取联系人信息
读取通信录中的联系人一般的过程是先查找联系人记录,然后再访问记录的属性,属性又可以分为单值属性和多值属性.通过下面例子介绍联系人的查询,以及单值属性和多值属性的访问,还有读取联系人中的图片数据. 本案 ...
- ios 向sqlite数据库插入和读取图片数据
向sqlite数据库插入和读取图片数据 (for ios) 假定数据库中存在表 test_table(name,image), 下面代码将图片文件test.png的二进制数据写到sqlite数据库: ...
- iOS彩票项目--第七天,初次读取json数据、KVC转模型技巧、运行时字典转模型以及初步对显示网页的操作并且跟踪标签
一.初次读取json数据 二.KVC转模型技巧,这里的技巧主要解决的是字典中的key 与 模型中有的属性对应不起来的时候 的解决办法 <方法1> <方法2>运行时字典转模型,运 ...
- iOS 获得通讯录中联系人的所有属性--b
ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef results = ABAddressBookCopyArrayOfA ...
- iOS有关通讯录操作
一.首先获取用户通讯录授权信息. 在AppDelegate中导入#import <AddressBook/AddressBook.h>框架,在下列方法中获取授权信息. - (BOOL)ap ...
- iOS开发系列--数据存取
概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...
- iOS - OC PList 数据存储
前言 直接将数据写在代码里面,不是一种合理的做法.如果数据经常改,就要经常翻开对应的代码进行修改,造成代码扩展性低.因此,可以考虑将经常变的数据放在文件中进行存储,程序启动后从文件中读取最新的数据.如 ...
随机推荐
- Javascript:作用域 学习总结
作用域(scope): 变量与函数的可访问范围,控制着变量与函数的可见性和生命周期 作用域分类: javascript中,变量的作用域分为:全局作用域,局部作用域 局部变量的优先级大于全局变量,或 ...
- Linux环境下Eclipse + Tomcat + MySQL 配置J2EE开发环境的方法
1. 版本号信息 (1)CentOS 6.4发行版64位,uname -a 显演示样例如以下: Linux localhost.localdomain 3.11.6 #1 SMP Sat Nov 2 ...
- 绘制更Smooth的UI
以前很长一段时间,在自定义控制绘制时,只是简单的定义一个QPainter对象而开始绘画.经常会画一些圆角矩形,甚至是一些不规则的图形.对于不规则的图形来说,如果PS技术不好,或者mask制作的不好,常 ...
- Gunplot 命令大全
在linux命令提示符下运行gnuplot命令启动,输入quit或q或exit退出. plot命令 gnuplot> plot sin(x) with line linetype 3 linew ...
- QT正则表达式---针对IP地址
判断合法IP的QT正则表达式: bool IsIPaddress(QString ip) { QRegExp rx2("(//d+)(//.)(//d+)(//.)(//d+)(//.)(/ ...
- Ubuntu 12.04设置打开远程桌面登录1
teamviewer_linux.deb sudo dpkg --install teamviewer_linux.deb
- .net的WebForm模拟MVC进行模型绑定,让自己少操劳
一.前言 用过MVC的兄弟们都知道,MVC有模型绑定表单提交的数据功能,那么我也想偷个懒也写个WebForm版的模型绑定.这里主要定义一个泛型方法,然后通过反射把表单上对应属性名字的值赋值到反射创建类 ...
- Linq 关键字
from var lowNums = from num in numbers where num < 5 select num; numbers 是数 ...
- winPcap_2_编译环境*注意*
使用WinPcap编程 创建一个使用 wpcap.dll 的应用程序 用 Microsoft Visual C++ 创建一个使用 wpcap.dll 的应用程序,需要按以下步骤: 在每一个使用了库的源 ...
- 用phpMyAdmin修改mysql数据库密码
1初始数据库密码为空. 2第一步,点击phpMyAdmin里的用户选项. 3选择root localhost用户名,点击编辑权限. 4此时会出来修改权限的页面,里面可以设置的选项还是比较多的,暂时不管 ...