iOS9 获取通讯录信息

来源:互联网 发布:淘宝店促销价怎么设置 编辑:程序博客网 时间:2024/06/05 18:24
<pre name="code" class="objc">
iOS9 里面 AddressBook Frame 被砍掉了,换成了 Contacts.frame work 。最近写的项目里需要用到通讯录,于是就稍微了研究了下。
WWDC session 223 专门讲的这个框架,如果需要深入了解的话,还是看视频比较好点。
如果只需要获取信息的话,用下面几行代码就够了。至于如何修改,增加已经有人写了 可以参考 http://www.jianshu.com/p/3768b9c65974 里面基本上包含了iOS9的更新内容
如何使用:
1.将你需要获取信息的kEY 都放到一个数组中。<pre name="code" class="objc">   NSArray *keysToFetch = @[[CNContactFormatter descriptorForRequiredKeysForStyle:CNContactFormatterStyleFullName],CNContactPhoneNumbersKey]; 
// 如果你的Request 中没有包含Key , 但是你后面又用到了该信息。程序就会挂掉。<div><span style="font-variant-ligatures: no-common-ligatures; color: #000000">2.根据你的Key数组生成一个 获取请求  </span><pre name="code" class="objc">       CNContactFetchRequest *request = [[CNContactFetchRequest alloc]initWithKeysToFetch:keysToFetch];
这里也可以设置 request 中的 Predicate 来设置筛选要求。不设置的话就是获取全部的信息。
3. 建立一个contactStore 来存放所有的信息
    CNContactStore *contactStore = [[CNContactStore alloc]init];
4. 根据Request 将联系人遍历出来就好了。
<pre name="code" class="objc"> NSMutableArray *contactArray = [NSMutableArray array];  
  [contactStore enumerateContactsWithFetchRequest:request error:nil usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) {
        [array addObject:contact];<pre name="code" class="objc">// 像名字这类确定的信息都能直接用点语法输出,但是电话和地址这类可能有多个的就需要从数组中单独的拎出来了。
NSArray <CNLabeledValue<CNPhoneNumber *> *> *phoneNumbers = contact.phoneNumbers; CNLabeledValue<CNPhoneNumber *> *firstPhoneNumberInfor = phoneNumbers[0]; CNPhoneNumber *number = firstPhoneNumberInfor.value; NSString *phoneNumber = number.stringValue; NSLog(@"%@%@,%@",contact.familyName,contact.givenName,phoneNumber );
}

                                             
0 0
原创粉丝点击