iOS 获取本机通讯录的所有属性

  一、在工程中添加AddressBook.framework和AddressBookUI.framework

  二、获取通讯录

  1、在infterface中定义数组并在init方法中初始化

NSMutableArray *addressBookTemp;
addressBookTemp=[NSMutableArray array];

  2、定义一个model,用来存放通讯录中的各个属性

  新建一个继承自NSObject的类,在.h中

@interface TKAddressBook : NSObject{
    NSInteger sectionNumber;
    NSInteger *name;
    NSString *email;
    NSString *tel;
}

@property NSInteger sectionNumber;
@property NSInteger recordID;
///姓名
@property (nonatomic,retain) NSString *name;
///邮箱
@property (nonatomic,retain) NSString *email;
///电话
@property (nonatomic,retain) NSString *tel;
@end

  3、获取联系人

在iOS6之后,获取通讯录需要获得权限

//获取联系人
-(void)ReadAllProple{
//取得本地通信录民柄
    ABAddressBookRef addressBook=nil;
    if ([[UIDevice currentDevice].systemVersion floatValue]>=6.0) {
        addressBook =ABAddressBookCreateWithOptions(NULL, NULL);
        //获取通讯录权限
        dispatch_semaphore_t sema=dispatch_semaphore_create(0);
        ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
            dispatch_semaphore_signal(sema);
        });
        dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
    }else{
        addressBook=ABAddressBookCreate();
    }

    //获取通讯录中的所有人
    CFArrayRef allPeople=ABAddressBookCopyArrayOfAllPeople(addressBook);
    NSLog(@"all---%@",allPeople);
    //通讯录人数
    CFIndex nPeople=ABAddressBookGetPersonCount(addressBook);
    NSLog(@"count---%li",nPeople);

    //获取每个人得信息
    for (NSInteger i=0; i<nPeople; i++) {
        //新建一个addressbook model类
        TKAddressBook *addBook=[[TKAddressBook alloc] init];
        //获取个人
        ABRecordRef person=CFArrayGetValueAtIndex(allPeople, i);

        //获取个人名字
        CFTypeRef abName = ABRecordCopyValue(person, kABPersonFirstNameProperty);
        CFTypeRef abLastName = ABRecordCopyValue(person, kABPersonLastNameProperty);
        CFStringRef abFullName = ABRecordCopyCompositeName(person);
        NSString *nameString = (__bridge NSString *)abName;
        NSString *lastNameString = (__bridge NSString *)abLastName;

        if ((__bridge id)abFullName != nil) {
            nameString = (__bridge NSString *)abFullName;
        } else {
            if ((__bridge id)abLastName != nil)
            {
                nameString = [NSString stringWithFormat:@"%@ %@", nameString, lastNameString];
            }
        }
        NSLog(@"nastring----%@",nameString);

        addBook.name=nameString;
        addBook.recordID=(int)ABRecordGetRecordID(person);

        ABPropertyID multiPeroperties[]={
            kABPersonPhoneProperty,//读取手机号码
            kABPersonEmailProperty,//读取邮箱
           // kABPersonFirstNameProperty,//读取firstname
           // kABPersonLastNameProperty,//读取lastname
           // kABPersonMiddleNameProperty,//读取middlename
           // kABPersonPrefixProperty,// 读取prefix前缀
           //  kABPersonSuffixProperty,//读取suffix后缀
           //  kABPersonNicknameProperty,//读取nickname呢称
           //  kABPersonFirstNamePhoneticProperty,//读取firstname拼音音标
           //  kABPersonLastNamePhoneticProperty,//读取lastname拼音音标
           //  kABPersonMiddleNamePhoneticProperty,//读取middlename拼音音标
           //  kABPersonOrganizationProperty,//读取organization公司
           // kABPersonJobTitleProperty,//读取jobtitle工作
           //  kABPersonDepartmentProperty,//读取department部门
           //  kABPersonBirthdayProperty,//读取birthday生日
           //  kABPersonNoteProperty,//读取note备忘录
           //  kABPersonCreationDateProperty,//第一次添加该条记录的时间
          //   kABPersonModificationDateProperty,//最后一次修改該条记录的时间

        };
        NSInteger multiPropertiesTotal=sizeof(multiPeroperties)/sizeof(ABPropertyID);
        for (NSInteger j = 0; j < multiPropertiesTotal; j++) {
            ABPropertyID property = multiPeroperties[j];
            ABMultiValueRef valuesRef = ABRecordCopyValue(person, property);
            NSInteger valuesCount = 0;
            if (valuesRef != nil) valuesCount = ABMultiValueGetCount(valuesRef);

            if (valuesCount == 0) {
                CFRelease(valuesRef);
                continue;
            }
            //获取电话号码和email
            for (NSInteger k = 0; k < valuesCount; k++) {
                CFTypeRef value = ABMultiValueCopyValueAtIndex(valuesRef, k);
                switch (j) {
                    case 0: {// Phone number
                        addBook.tel = (__bridge NSString*)value;
                        break;
                    }
                    case 1: {// Email
                        addBook.email = (__bridge NSString*)value;
                        break;
                    }
                }
                CFRelease(value);
            }
            CFRelease(valuesRef);
        }
        //将个人信息添加到数组中,循环完成后addressBookTemp中包含所有联系人得信息
        [addressBookTemp addObject:addBook];
    }

    NSLog(@"b ook----%@",addressBookTemp);
}

  然后就可以用TableView显示出来:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *[email protected]"acell";
    MailListTableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:acell];
    if (!cell) {
        cell=[[[NSBundle mainBundle]loadNibNamed:@"MailListTableViewCell" owner:self options:nil]lastObject];
    }
    cell.selectionStyle=UITableViewCellSelectionStyleNone;
    TKAddressBook *book=[addressBookTemp objectAtIndex:indexPath.row];

    cell.lalName.text=book.name;
    cell.lalPhone.text=book.tel;
//    [email protected]"怪咖啡是腾讯自制的网络情景喜剧,在剧中的启萱是一个“怪咖啡”店长,个性孤傲、说话一针见血的女汉子。";
    cell.lalRemarks.text=book.email;
    return cell;
}

  

  以上就是整个功能的核心代码,效果如下:

读取本机通讯录的基本功能已完成,其他的未写出来的属性可参考一下两个连接:

http://www.cocoachina.com/bbs/read.php?tid=62527

http://www.cnblogs.com/qingjoin/archive/2012/11/19/2777212.html

时间: 2024-11-13 08:14:57

iOS 获取本机通讯录的所有属性的相关文章

[转]iOS技巧之获取本机通讯录中的内容,解析通讯录源代码

一.在工程中添加AddressBook.framework和AddressBookUI.framework 二.获取通讯录 1.在infterface中定义数组并在init方法中初始化 ? 1 2 3 4 5 6 NSMutableArray *addressBookTemp; - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {     addressBookTemp = [NSMu

iOS开发 - 获取真机沙盒数据

今天要获取之前真机测试时写入沙盒的数据, 本来以为挺麻烦的. 后来捣腾了一下, 才知道原来这么简单... 下面直接看具体步骤. 前提: 真机已经通过USB和你的电脑连接上了! 1.进入Organizer 2.选择你的应用. 并导出数据.(点击Download) 3.保存数据到相应位置.(点击Save) 4.打开, 查看数据. 保存完毕后, 你后发现一个这样的文件. 选中它, 右键---->显示包内容. 然后进入------->AppData ------>Documents. 即可看到你

ios 获取通讯录的所有信息

iOS获取通讯录全部信息 ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef results = ABAddressBookCopyArrayOfAllPeople(addressBook); for(int i = 0; i < CFArrayGetCount(results); i++) { ABRecordRef person = CFArrayGetValueAtIndex(results, i); //读取f

iOS获取汉字的拼音

在iOS开发中经常涉及到汉字的排序,最常见的就是需要根据首字母的字符顺序排列,比如常见的通讯录等.总结出来,大致可以分为两种方法,其中参考文献[1]中提供的方法十分复杂,并且代码量很大,不建议采用.另一种方法是直接采用Core Foundation中提供的方法,十分简单,封装好的代码如下: 1 - (NSString *)transform:(NSString *)chinese{ 2 //将NSString装换成NSMutableString 3 NSMutableString *pinyin

iOS通过app读取通讯录信息(整理)

iOS通过app读取通讯录信息,读取通讯录信息时需要加载AddressBookUI 和AddressBook两个包,并且引入头文件 #import <AddressBook/AddressBook.h> #import <AddressBookUI/AddressBookUI.h> 具体实现如下: -(void)readAllPeoples { //定义通讯录名字为addressbook ABAddressBookRef tmpAddressBook = nil; //根据系统版本

iOS开发——高级技术&amp;通讯录功能的实现

通讯录功能的实现 iOS 提供了对通讯录操作的组建,其中一个是直接操作通讯录,另一个是调用通讯录的 UI 组建.实现方法如下: 添加AddressBook.framework到工程中. 代码实现: 1 -(IBAction)onClickbutton:(id)sender 2 { 3 NSMutableArray* personArray = [[[NSMutableArray alloc] init] autorelease]; 4 ABAddressBookRef addressBook =

iOS获取uuid

UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定.如此一来,每个人都可以建立不与其它人冲突的 UUID.在这样的情况下,就不需考虑数据库建立时的名称重复问题. UUID由以下几部分的组合: (1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同. (2)时钟序列. (3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得

iOS获取.ipa程序包

iOS获取.ipa程序包 原文在此 首先肯定不是获取自己的ipa包. 为什么要获取ipa包呢?比如,在仿写一些程序时,避免不了获取它的图片素材等等,那么最快也是最有效的方式就是获取原程序的ipa包.更或者,你想要逆向分析某一款APP时,那么只有获取了ipa后才能进行class-dump,ida等等后续工作. 一.通过越狱设备 如果有越狱手机,那么就变得很简单,只需要从AppStore下载到越狱手机,然后用iTools/PP助手等工具将ipa包备份到电脑即可,下图是使用PP助手: 如果只是为了获取

iOS、真机调试

Xcode中IOS.真机测试 一.购买开发者账号(需要有信用卡.每年支付$99.0) 二.直接淘宝购买一个.用于测试,但是不能上传App 1.获取手机的UUID(Identifier xxxxxx9e7ea4dxxxxxxxxb2eaa582b408xxxxxxx) 2.发送给’卖家’,会帮你生成2个文件 (All_dev_015.mobileprovision 和 All_dev_015.p12) 3.直接双击运行即可! [PS:具体步骤,淘宝店面中有!] 三.**免证书测试**(需要iPho