在iOS中读取通讯录中联系人电话号码时需要注意的版本区别

原创 2014年12月03日 15:36:32

今天遇到一个问题,发现同一个联系人的电话号码有时候读取得到,有时候读取不到。后来发现在iOS 8上是正常工作的,但是在iOS 7.1上获取到的值为空(也可能是iOS 8之前的所有版本,没有全部验证过)。

1
2
3
4
5
6
7
8
9
10
11
12
ABAddressBookRef abRef = ABAddressBookCreateWithOptions(NULL, NULL);
CFArrayRef cfPersons = ABAddressBookCopyArrayOfAllPeople(abRef);
NSArray *persons = CFBridgingRelease(cfPersons);
CFRelease(abRef);
 
ABRecordRef person = (__bridge ABRecordRef)(persons[0]);
ABMultiValueRef phoneNumbers = (ABMultiValueRef)ABRecordCopyValue(person, kABPersonPhoneProperty);
if (phoneNumbers) {
  CFIndex count = ABMultiValueGetCount(phoneNumbers);
  NSString *number = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, 0);
  CFRelease(phoneNumbers);
}

如上代码,如果先释放abRef再读取person的属性值,在iOS 7.1上,单字段的属性如FirstName、LastName等是可以获取得到的,但多字段的属性如PhoneNumber、Address、Email是获取不到的。在iOS 8上都是可以获取得到的。

如果是在读取完多字段属性后再释放abRef,那么在iOS 7.1上也可以正常工作。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

iOS开发获取手机通讯录中的电话号码和姓名

1、申请授权[objc] view plain copy print?#import “AppDelegate.h”  #import     @interface AppDelegate ()...

Android 2.0 API 读取通讯录中电话号码的实例

import android.app.Activity; import android.content.ContentResolver; import android.database.Cursor;...

实现简单通讯录操作。
1、定义联系人类AddressPerson。实例变量:姓名、性别、电话号码、住址、分组名称。方法:自定义初始化方法(姓名、电话号码)、显示联系人信息
2、在main.m中定义可变

(在 .h文件中声明) #import @interface AddressPerson : NSObject { NSString *_name;//姓名 NSString *_...

实现中等难度通讯录。需求: 1、定义联系人类AddressContact。实例变量:姓名(拼音,首字母大写)、性别、电话号码、住址、分组名称、年龄。方法:自定义初始化方法(姓名、电话号码)、显示联系人

// 1、定义联系人类AddressContact。实例变量:姓名(拼音,首字母大写)、性别、电话号码、住址、分组名称、年龄。方法:自定义初始化方法(姓名、电话号码)、显示联系人信息 { N...

//实现中等难度通讯录。需求: //1、定义联系人类Contact。实例变量:姓名(拼音,首字母大写)、性别、电话号码、住址、分组名称、年龄。方法:自定义初始化方法(姓名、电话号码)、显示联系人信息

import import “Contact.h”import “AddressBook.h”int main(int argc, const char * argv[]) { @autor...

android通过查询电话号码获取联系人头像

// 取得Intent中的頭像 ivShowImage = (ImageView) findViewById(R.id.call_log_detail_contact_img); //通话...

android之选择联系人并返回电话号码

在跟着这个教程联系的时候,它所用到的选择联系人方式是自己从数据库里把联系人读取出来,然后用listview显示,选择后返回手机号码, 这样做在点击选择联系人的时候,需要时间去加载,并且显示出来的联系人...

android开发:跳转至联系人界面选择后返回电话号码

在开发中经常要使用联系人电话号码,需要跳转至联系人界面,选择后返回电话号码.为了解决该问题,通过对系统上层源代码的查看,实现了跳转获取.步骤如下: 1,源代码查看 找到上层源代码中系统联系人app...

Android 怎么去掉联系人、通话记录、拨号列表界面中的电话号码中间的空格?

前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处: ...

android之选择联系人并返回电话号码

转自:http://blog.csdn.net/jason0539 在跟着这个教程联系的时候,它所用到的选择联系人方式是自己从数据库里把联系人读取出来,然后用listview显示,选择后返回手机...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)