ios获取系统通讯录方法
本帖最后由 Sian 于 2015-4-4 10:38 编辑网上相关贴子很多,但基本上都来自同一个出处,基础不好的同学可能看来起会很吃力,我今天整理了一下,化繁为简只提取通讯录中姓名与电话号码,给出最简便的方便供大家参考
为方便大家调用,我写成了返回数组的方法,直接copy到你的代码中即可取得联系人对象的数组,废话不多说直接上代码吧,数据模型可自定义,只要包含姓名、号码两个成员变量即可,我这里就不粘了,根据需要自定义吧,如有需要可回复
- (NSArray *)getContacts:(ABAddressBookRef)adress{
// 1、获取通讯录 CFArrayRef results = ABAddressBookCopyArrayOfAllPeople(adress);
// 2、遍历通讯录 NSMutableArray *array = ; for (int i = 0; i < CFArrayGetCount(results); i++){
// 2.1、获取单条记录 ABRecordRef person = CFArrayGetValueAtIndex(results, i);
// 2.2、取记录中的名字 NSString *firstName = (__bridge NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty); NSString *name = (__bridge NSString*)ABRecordCopyValue(person, kABPersonLastNameProperty); if (firstName) name = ; // 名字拼接
// 2.3、取记录中的号码 ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty); // 所有号码 for (int k = 0; k < ABMultiValueGetCount(phones); k++){ // 遍历取值 NSString * phone = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phones, k); // 取出号码 RMContact *contact = ; ; // 加入数组 } }
return array;}
红色部分请根据自已的数据模型创建!!方便Copy写成代码块:- (NSArray *)getContacts:(ABAddressBookRef)adress
{
// 1、获取通讯录
CFArrayRef results = ABAddressBookCopyArrayOfAllPeople(adress);
// 2、遍历通讯录
NSMutableArray *array = ;
for (int i = 0; i < CFArrayGetCount(results); i++){
// 2.1、获取单条记录
ABRecordRef person = CFArrayGetValueAtIndex(results, i);
// 2.2、取记录中的名字
NSString *firstName = (__bridge NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty);
NSString *name = (__bridge NSString*)ABRecordCopyValue(person, kABPersonLastNameProperty);
if (firstName) name = ; // 名字拼接
// 2.3、取记录中的号码
ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty); // 所有号码
for (int k = 0; k < ABMultiValueGetCount(phones); k++){ // 遍历取值
NSString * phone = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phones, k); // 取出号码
RMLocalContact *contact = ;
; // 加入数组
}
}
_contacts = ;
return array;
}
**** Hidden Message *****
RMContact。。。请问楼主是什么东东?能发一个看看不 请问楼主,调用- (NSArray *)getContacts:(ABAddressBookRef)adress时;adress我传什么值?本人菜鸟一枚~ tyl0123456 发表于 2015-4-2 23:08
请问楼主,调用- (NSArray *)getContactsABAddressBookRef)adress时;adress我传什么值?本人菜鸟一枚~
创建ABAddressBookRef 对象
ABAddressBookRefaddressBook = ABAddressBookCreateWithOptions(nil, nil); tyl0123456 发表于 2015-4-2 23:01
RMContact。。。请问楼主是什么东东?能发一个看看不
RMContact只是个数据模型,你可以自己定义
@interface RMContact : NSObject
/**
* 联系人ID
*/
@property (nonatomic ,assign) long contactID;
/**
* 联系方式姓名
*/
@property (nonatomic ,retain) NSString *name;
/**
* 手机
*/
@property (nonatomic ,retain) NSString *cellPhone;
- (id)initWithName:(NSString*)name cellPhone:(NSString*)cellPhone;
+ (id)contactWithName:(NSString*)name cellPhone:(NSString*)cellPhone;
@end 我打断点。 for (int i = 0; i < CFArrayGetCount(results); i++){} for里边直接不进去呢?楼主能否发个demo。让我mark一下??万分感激~~~ [email protected]谢谢 tyl0123456 发表于 2015-4-3 11:05
我打断点。 for (int i = 0; i < CFArrayGetCount(results); i++){} for里边直接不进去呢?楼主能否 ...
给你一份完整的代码,Demo也上传在帖子中,供你下载。
//
//SAViewController.m
//Test
//
//Created by yusian on 15-4-4.
//Copyright (c) 2015年 Sian. All rights reserved.
//
#import "SAViewController.h"
#import <AddressBook/AddressBook.h>
@interface SAViewController ()
@end
@implementation SAViewController
- (void)viewDidLoad
{
;
ABAddressBookRef bookRef = ABAddressBookCreateWithOptions(nil, nil);
//获取本地通讯录访问权限
ABAddressBookRequestAccessWithCompletion(bookRef, ^(bool granted, CFErrorRef error){
NSArray *array = ;
NSLog(@"%@", array);
});
}
- (NSArray *)getContacts:(ABAddressBookRef)adress
{
// 1、获取通讯录
CFArrayRef results = ABAddressBookCopyArrayOfAllPeople(adress);
// 2、遍历通讯录
NSMutableArray *array = ;
for (int i = 0; i < CFArrayGetCount(results); i++){
// 2.1、获取单条记录
ABRecordRef person = CFArrayGetValueAtIndex(results, i);
// 2.2、取记录中的名字
NSString *firstName = (__bridge NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty);
NSString *name = (__bridge NSString*)ABRecordCopyValue(person, kABPersonLastNameProperty);
if (firstName) name = ; // 名字拼接
// 2.3、取记录中的号码(可能存在多个)
ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty); // 所有号码
for (int k = 0; k < ABMultiValueGetCount(phones); k++){ // 遍历取值
NSString * phone = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phones, k); // 取出号码
// 拼接姓名号码,如:(张三:15555555555:18888888888)
name = ;
}
// 添加到数组,强烈建议在此创建一个通讯录的模型来接收数据,将数据保存到数组!
if (name) ;
}
return array;
}
@end 我来看一看
页:
[1]