转载至:http://superuna.blog.51cto.com/4192682/982938

//新增联系人
-(void)AddPeople
{
        //取得本地通信录名柄
    ABAddressBookRef tmpAddressBook = ABAddressBookCreate();
        //创建一条联系人记录
        ABRecordRef tmpRecord = ABPersonCreate();
    CFErrorRef error;
    BOOL tmpSuccess = NO;
        //Nickname
        CFStringRef tmpNickname = CFSTR("Sparky");
    tmpSuccess = ABRecordSetValue(tmpRecord, kABPersonNicknameProperty, tmpNickname, &error);
        CFRelease(tmpNickname);
        //First name
        CFStringRef tmpFirstName = CFSTR("zhang");
    tmpSuccess = ABRecordSetValue(tmpRecord, kABPersonFirstNameProperty, tmpFirstName, &error);
        CFRelease(tmpFirstName);
        //Last name
        CFStringRef tmpLastName = CFSTR("shan");
    tmpSuccess = ABRecordSetValue(tmpRecord, kABPersonLastNameProperty, tmpLastName, &error);
        CFRelease(tmpLastName);
        //phone number
        CFTypeRef tmpPhones = CFSTR("13902400000");
    ABMutableMultiValueRef tmpMutableMultiPhones = ABMultiValueCreateMutable(kABPersonPhoneProperty);
    ABMultiValueAddValueAndLabel(tmpMutableMultiPhones, tmpPhones, kABPersonPhoneMobileLabel, NULL);
    tmpSuccess = ABRecordSetValue(tmpRecord, kABPersonPhoneProperty, tmpMutableMultiPhones, &error);
        CFRelease(tmpPhones);
    //保存记录
    tmpSuccess = ABAddressBookAddRecord(tmpAddressBook, tmpRecord, &error);
        CFRelease(tmpRecord);
        //保存数据库
    tmpSuccess = ABAddressBookSave(tmpAddressBook, &error);
        CFRelease(tmpAddressBook);
}

//删除联系人
-(void)DeletePeople
{
        //取得本地通信录名柄
        ABAddressBookRef tmpAddressBook = ABAddressBookCreate();
        NSArray* tmpPersonArray = (NSArray*)ABAddressBookCopyArrayOfAllPeople(tmpAddressBook);

        for(id tmpPerson in tmpPersonArray)
        {
                NSString* tmpFirstName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonFirstNameProperty);

                NSString* tmpLastName  = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonLastNameProperty);

                NSString* tmpFullName = [NSString stringWithFormat: @"%@%@", [tmpFirstName lowercaseString], [tmpLastName lowercaseString]];
                [tmpFirstName release];
                [tmpLastName release];
                //删除联系人
                if([tmpFullName isEqualToString:@"zhangshan"])
                {
                        ABAddressBookRemoveRecord(tmpAddressBook, tmpPerson, nil);

                }
        }
        //保存电话本
        ABAddressBookSave(tmpAddressBook, nil);
        //释放内存
        [tmpPersonArray release];
        CFRelease(tmpAddressBook);
}

//读取所有联系人
-(void)ReadAllPeoples
{       
        //取得本地通信录名柄
        ABAddressBookRef tmpAddressBook = ABAddressBookCreate();
        //取得本地所有联系人记录
        NSArray* tmpPeoples = (NSArray*)ABAddressBookCopyArrayOfAllPeople(tmpAddressBook);
        for(id tmpPerson in tmpPeoples)
        {               
                //获取的联系人单一属性:First name
                NSString* tmpFirstName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonFirstNameProperty);
                NSLog(@"First name:%@", tmpFirstName);
                [tmpFirstName release];
                //获取的联系人单一属性:Last name
                NSString* tmpLastName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonLastNameProperty);

                NSLog(@"Last name:%@", tmpLastName);
                [tmpLastName release];
                //获取的联系人单一属性:Nickname
                NSString* tmpNickname = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonNicknameProperty); 

                NSLog(@"Nickname:%@", tmpNickname);
                [tmpNickname release];
                //获取的联系人单一属性:Company name
                NSString* tmpCompanyname = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonOrganizationProperty);

                NSLog(@"Company name:%@", tmpCompanyname);
                [tmpCompanyname release];
                //获取的联系人单一属性:Job Title
                NSString* tmpJobTitle= (NSString*)ABRecordCopyValue(tmpPerson, kABPersonJobTitleProperty);

                NSLog(@"Job Title:%@", tmpJobTitle);
                [tmpJobTitle release];
                //获取的联系人单一属性:Department name
                NSString* tmpDepartmentName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonDepartmentProperty);
                NSLog(@"Department name:%@", tmpDepartmentName);
                [tmpDepartmentName release];
                //获取的联系人单一属性:Email(s)
                ABMultiValueRef tmpEmails = ABRecordCopyValue(tmpPerson, kABPersonEmailProperty);
                for(NSInteger j = 0; ABMultiValueGetCount(tmpEmails); j++)
                {
                        NSString* tmpEmailIndex = (NSString*)ABMultiValueCopyValueAtIndex(tmpEmails, j);
                        NSLog(@"Emails%d:%@", j, tmpEmailIndex);
                        [tmpEmailIndex release];
                }
                CFRelease(tmpEmails);
                //获取的联系人单一属性:Birthday
                NSDate* tmpBirthday = (NSDate*)ABRecordCopyValue(tmpPerson, kABPersonBirthdayProperty);
                NSLog(@"Birthday:%@", tmpBirthday);       
                [tmpBirthday release];
                //获取的联系人单一属性:Note
                NSString* tmpNote = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonNoteProperty);
                NSLog(@"Note:%@", tmpNote);       
                [tmpNote release];
                //获取的联系人单一属性:Generic phone number
                ABMultiValueRef tmpPhones = ABRecordCopyValue(tmpPerson, kABPersonPhoneProperty);
                for(NSInteger j = 0; j < ABMultiValueGetCount(tmpPhones); j++)
                {
                        NSString* tmpPhoneIndex = (NSString*)ABMultiValueCopyValueAtIndex(tmpPhones, j);
                        NSLog(@"tmpPhoneIndex%d:%@", j, tmpPhoneIndex);
                        [tmpPhoneIndex release];
                }
                CFRelease(tmpPhones);
        }
        //释放内存
        [tmpPeoples release];
        CFRelease(tmpAddressBook);
}

iOS 通讯录操作的更多相关文章

  1. iOS有关通讯录操作

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

  2. iOS 通讯录-获取联系人属性

    内容均来自关东升老师的ios开发指南 上一篇写了联系人框架的一些必须知道的知识 如今写一下读取联系人数据相关操作 要读取通讯录数据库 须要 创建通讯录对象 查询获取数据(全部或者部分) 获取通讯录某一 ...

  3. iOS通讯录相关知识-浅析

    本文来自于:贞娃儿的博客  http://blog.sina.com.cn/zhenwawaer  在开发一些应用中,我们如果需要iPhone设备中的通讯录信息.或者,需要开发通讯录相关的一些功能.那 ...

  4. Xamarin.Forms读取并展示Android和iOS通讯录 - TerminalMACS客户端

    Xamarin.Forms读取并展示Android和iOS通讯录 - TerminalMACS客户端 本文同步更新地址: https://dotnet9.com/11520.html https:// ...

  5. iOS 数据库操作(使用FMDB)

    iOS 数据库操作(使用FMDB)   iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.Plausibl ...

  6. iOS——文件操作NSFileManager (创建、删除,复制,粘贴)

    iOS——文件操作NSFileManager (创建.删除,复制,粘贴)       iOS的沙盒机制,应用只能访问自己应用目录下的文件.iOS不像android,没有SD卡概念,不能直接访问图像.视 ...

  7. IOS文件操作的两种方式:NSFileManager操作和流操作

    1.常见的NSFileManager文件方法 -(NSData *)contentsAtPath:path //从一个文件读取数据 -(BOOL)createFileAtPath: path cont ...

  8. IOS数据库操作SQLite3使用详解(转)

    iPhone中支持通过sqlite3来访问iPhone本地的数据库.具体使用方法如下1:添加开发包libsqlite3.0.dylib首先是设置项目文件,在项目中添加iPhone版的sqlite3的数 ...

  9. iOS 通讯录空格

    iOS 通讯录联系人出现 ASCII 码值为 160 的空格  NOTE:       这里的"空格"是指 在通讯录中取出的联系人中带有特殊空格 带有特殊空格的字符串 " ...

随机推荐

  1. Ubuntu文件操作命令

    1.工具栏放下面或者左边的命令 gsettings set com.canonical.Unity.Launcher launcher-position Left gsettings set com. ...

  2. 同事的游戏项目--Robocode-学习链接

    Robocode机器人库学习链接:http://www.pudn.com/search_db.asp?keyword=Robocode 官网 :http://robocode.sourceforge. ...

  3. 机器学习:异常检测算法Seasonal Hybrid ESD及R语言实现

    Twritters的异常检测算法(Anomaly Detection)做的比较好,Seasonal Hybrid ESD算法是先用STL把序列分解,考察残差项.假定这一项符合正态分布,然后就可以用Ge ...

  4. C# 参数化SQL语句中的like和in

    在写项目的时候遇到一个问题,sql 语句进行 like in 参数化,按照正常的方式是无法实现的我们一般的思维是: Like 参数:string strSql = "select * fro ...

  5. MVC异常日志生产者消费者模式记录(异常过滤器)

    生产者消费者模式 定义自己的异常过滤器并注册 namespace Eco.Web.App.Models { public class MyExceptionAttribute : HandleErro ...

  6. 为您详细比较三个 CSS 预处理器(框架):Sass、LESS 和 Stylus

    CSS 预处理器技术已经非常的成熟,而且也涌现出了越来越多的 CSS 的预处理器框架.本文向你介绍使用最为普遍的三款 CSS 预处理器框架,分别是 Sass.Less CSS.Stylus. 首先我们 ...

  7. StringBuilder和Append的一个程序及一个基础概念

    废话少说直接来说:比如在串口数据操作中,我们只想显示串口接收的字符串,好吧你用string[]吧,有多少个字符串(顺便说下二进制在C#中是以字符串形式出现的)就要分配多少个储存空间,自己试下,要你你干 ...

  8. HDU 5686:2016"百度之星" - 资格赛 Problem B

    原文链接:https://www.dreamwings.cn/hdu5686/2645.html Problem B Time Limit: 2000/1000 MS (Java/Others)    ...

  9. python学习笔记十三 JS,Dom(进阶篇)

    JS介绍 JavaScript 是属于网络的脚本语言!JavaScript 被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies,以及更多的应用:JavaScript 是因特网上最流 ...

  10. llinux 压缩 解压

    1.zip  1) 将文件夹 mydir 压缩为 mydir.zip zip -r mydir.zip mydir 2) 将文件 one.two 压缩到 ot.zip zip -r ot.zip on ...