IOS 开发之读取addressbook的实现实例

IOS 开发之读取addressbook的实现实例

iphone读取addressbook:

1.添加addressbook.framework

2.在需要的源文件中    

#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h> 

3.开始粘代码:

//get all people info from the address book
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);//这是个数组的引用
for(int i = 0; i<CFArrayGetCount(people); i++){
  //parse each person of addressbook
  ABRecordRef record=CFArrayGetValueAtIndex(people, i);//取出一条记录
  //以下的属性都是唯一的,即一个人只有一个FirstName,一个Organization。。。
  CFStringRef firstName = ABRecordCopyValue(record,kABPersonFirstNameProperty);
  CFStringRef lastName = ABRecordCopyValue(record,kABPersonLastNameProperty);
  CFStringRef company = ABRecordCopyValue(record,kABPersonOrganizationProperty);
  CFStringRef department = ABRecordCopyValue(record,kABPersonDepartmentProperty);
  CFStringRef job = ABRecordCopyValue(record,kABPersonJobTitleProperty);
  //"CFStringRef"这个类型也是个引用,可以转成NSString*
  NSlog((NSString *)firstName);
  //......
  //所有这些应用都是要释放的,手册里是说“you are responsible to release it"
  (firstName==NULL)?:CFRelease(firstName);
  (lastName==NULL)?:CFRelease(lastName);
  (company==NULL)?:CFRelease(company);
  (department==NULL)?:CFRelease(department);
  (job==NULL)?:CFRelease(job);
  //.......
  //有些属性不是唯一的,比如一个人有多个电话:手机,主电话,传真。。。
  ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutable(kABMultiStringPropertyType);
  //所有ABMutableMultiValueRef这样的引用的东西都是这样一个元组(id,label,value)
  multiPhone = ABRecordCopyValue(record, kABPersonPhoneProperty);
  for (CFIndex i = 0; i < ABMultiValueGetCount(multiPhone); i++) {
    CFStringRef labelRef = ABMultiValueCopyLabelAtIndex(multiPhone, i);
    CFStringRef numberRef = ABMultiValueCopyValueAtIndex(multiPhone, i);
    //可以通过元组的label来判定这个电话是哪种电话,比如下面就包括:主电话,手机,工作传真
    if([(NSString *)labelRef isEqualToString:(NSString *) kABPersonPhoneMainLabel]){
      person._mainPhone = (NSString *)numberRef;
    }else if([(NSString *)labelRef isEqualToString:(NSString *) kABPersonPhoneMobileLabel]){
      person._cellPhone = (NSString *)numberRef;
    }else if([(NSString *)labelRef compare:(NSString *) kABPersonPhoneWorkFAXLabel]==NSOrderedSame){
      person._fax = (NSString *)numberRef;
    }
    CFRelease(labelRef);
    CFRelease(numberRef);
  }
  CFRelease(multiPhone);
}
//释放资源
//其他还有url,email,地址等等属性都是ABMutableMultiValueRef多值类型的,可以采用循环来遍历

完了,保存addressbook的部分等以后。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • JS解决IOS中拍照图片预览旋转90度BUG的问题

    上篇文章[Js利用Canvas实现图片压缩功能]中做了图片压缩上传,但是在IOS真机测试的时候,发现图片预览的时候自动逆时针旋转了90度.对于这个bug,我完全不知道问题出在哪里,接下来就是面向百度编程了.通过度娘找到了相关资料,解决方法记录在此.这个问题的具体因素其实我还是不清楚是为何导致的,只有IOS和部分三星手机会出现此bug. 绝大部分的安卓机并无此问题. 解决此问题需要引入一个第三方 JS 库: exif.js 下载地址:https://github.com/exif-js/exif-

  • Android实现类似iOS风格的对话框实例代码

    分享一个简单的常用的对话框类,按照国际惯例,先上图 布局简单,先上布局.一个标题,一个内容,两个按钮 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout an

  • IOS开发之手势响应事件优先级的实例详解

    IOS开发之手势响应事件优先级的实例详解 交互响应事件都是通过手势的操作完成的,如点击.或双击.或长按,这些交互都是在视图中完成的,但是不同的视图可能会有不同的交互,有时候就会出现交互响应事件冲突的情况.这时候就需要处理事件优先级,以便达到想要的效果. 示例场景:一个自定义模式视图view中,有一个列表视图table,同时有一个确定的按钮视图button:在view中有一个单击事件UITapGestureRecognizer,在table中点击每个cell也会有点击事件,同样的button中有个

  • iOS开发之TextField禁用粘贴、选择和全选功能

    众所周知,TextField默认情况下,双击会出现"Paste"等提示复制粘贴的快捷菜单,方便用户快速编辑文本,但很多情况下,我们并不希望用户能够粘贴文本[虽然这样不友好,但万一产品经理要这么实现呢?],那么我们可以这样做: 方法 自定义TextField 重写canPerformAction方法 class CustomTextField: UITextField { /// 是否只是用于显示(禁用粘贴.选择和全选功能) var displayOnly = false /// 禁用粘

  • IOS 中弹框的实现方法整理

    IOS 中弹框的实现方法整理 #define iOS8Later ([UIDevice currentDevice].systemVersion.doubleValue >= 8.0) ios 8以前的弹框 @interface RootViewController ()<UIAlertViewDelegate> @end UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"登陆失败" message:

  • ios微信浏览器返回不刷新问题完美解决方法

    开始用的表单提交,返回参数就丢失,换成url跳转,popstate监听 (注释部分)ios10测试始终有问题,继续搜,最后用pageshow,pagehide完美解决(另外说一句:珍爱生命,远离微信和ios) var wxback = { init :function(){ //隐藏微信分享按钮等 document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() { WeixinJSBridge.call('hid

  • IOS 开发之读取addressbook的实现实例

    IOS 开发之读取addressbook的实现实例 iphone读取addressbook: 1.添加addressbook.framework 2.在需要的源文件中     #import <AddressBook/AddressBook.h> #import <AddressBookUI/AddressBookUI.h> 3.开始粘代码: //get all people info from the address book ABAddressBookRef addressBo

  • IOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解 在实际的开发需求时,有时候我们需要对某些对象进行打包,最后拼接到参数中 例如,我们把所有的参数字典打包为一个 字符串拼接到参数中 思路:利用系统系统JSON序列化类即可,NSData作为中间桥梁 //1.字典转换为字符串(JSON格式),利用 NSData作为桥梁; NSDictionary *dic = @{@"name":@"Lisi",@"sex":@"m",@"tel&qu

  • IOS开发实现手机震动的提示实例代码

    IOS开发实现手机震动的提示实例代码 我们都知道手机有震动功能,其实呢,这个功能实现起来特别的简单,我们只需要用到几个函数就可以了: - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event - (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event - (void)motionCancelled:(UIEventSubtype)mot

  • iOS开发检测是否开启定位、是否允许消息推送等权限的实例

    1.iOS开发检测是否开启定位: 需要导入: #import <CoreLocation/CoreLocation.h> 代码如下: + (void)openLocationServiceWithBlock:(ReturnBlock)returnBlock { BOOL isOPen = NO; if ([CLLocationManager locationServicesEnabled] && [CLLocationManager authorizationStatus] !

  • IOS 开发之数据存储writeToFile的应用实例

    IOS 开发之数据存储writeToFile的应用实例 最近项目上要弄数据的导入与导出,所以就研究了一下数据的保存,其实很简单  第一步:获得文件即将保存的路径: NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask,YES);//使用C函数NSSearchPathForDirectoriesInDomains来获得沙盒中目录的全路径.该函数有三个参数

  • IOS 开发中画扇形图实例详解

    IOS 开发中画扇形图实例详解 昨天在做项目中,遇到一个需要显示扇形图的功能,网上搜了一下,发现code4app里面也没有找到我想要的那种类似的效果,没办法了,只能自己学习一下如何画了. 首先我们需要了解一个uiview的方法 -(void)drawRect:(CGRect)rect 我们知道了这个方法,就可以在自定义UIView的子类的- (void)drawRect:(CGRect)rect里面绘图了,关于drawrect的调用周期,网上也是一找一大堆,等下我会整理一下,转载一篇供你们参考.

  • iOS开发中以application/json上传文件实例详解

    本文通过实例代码给大家讲解iOS中以application/json上传文件的形式,具体内容详情大家参考下本文. 在和sever后台交互的过程中.有时候.他们需要我们iOS开发者以"application/json"形式上传. NSString *accessUrl = [NSString stringWithFormat:@"%@/xxx",@"https://www.xxxxx.com:xxxx"]; NSMutableURLRequest

  • IOS开发之为视图绘制单(多)个圆角实例代码

    IOS开发之为视图绘制单(多)个圆角实例代码 前言: 为视图绘制圆角,圆角可以选左上角.左下角.右下角.右上角.全部圆角 //Core Raduias UIView *actionView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)]; UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:actionView.bounds byRoundingCo

  • iOS开发之时间戳(或date)转字符串的实例代码

    1.时间戳转字符串 ///时间戳转化为字符转0000-00-00 00:00 + (NSString *)time_timestampToString:(NSInteger)timestamp{ NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:timestamp]; NSDateFormatter *dateFormat=[[NSDateFormatter alloc]init]; [dateFormat setDate

随机推荐