iOS开发进阶-Contacts/ContactUI学习和使用

Contacts FrameWork是苹果推出的新联系人框架。应用于iOS 9.0之后,9.0之后将会全面取代Address Book 。用过Address Book的开发者都应该能理解苹果为何要弃用它了。一方面对于开发者实在不是很友好,语法怪怪的。另一方面,作者猜测可能是线程安全方面做得不够好,所以苹果打算有所改进。本文将阐述ContactsContactsUI的基本原理和基本用法。

Contacts

因为大部分的App都只是需要读取联系人信息而不需要做修改,因此Contacts只能读取,同时它的线程安全得到很好的保障。


联系人对象

这里写图片描述

Contact类是线程安全的,联系人的属性是不可以改变的,比如联系人的名称,图片,或者电话号码。这个类有点像NSDictionary,里面存了各种类型的东西。和MutableDictionary很类似,它有一个可变的子类CNMutableContact,可以修改联系人的属性。联系人的某些属性可以有多个值,如电话号码或电子邮件地址,它们都是包含了CNLabeledValue对象数组,CNLabeledValue是很有意思的一个类,我个人感觉里面主要还是使用了swift的新特性puple中文叫做元组。元组和数组类似,只不过里面数组的元素类型可以是不同的。一个CNLabeledValue对象其实就是包含了一个Label和一个Value的线程安全的不可变元组。每个Label描述了每个Value的使用者。比如电话号码,家庭号码和工作号码都是不同的Label。苹果已经提供了很多实用的标签,如果开发者觉得不够用也可以自己定义,我个人感觉够用了。


学习相关API

首先了解一下头文件中包含的相关类。头文件集中在<Contacts/Contacts.h>, 我们依次过一遍相关的API。

#import <Contacts/CNLabeledValue.h>
#import <Contacts/CNPhoneNumber.h>
#import <Contacts/CNPostalAddress.h>
#import <Contacts/CNMutablePostalAddress.h>
#import <Contacts/CNInstantMessageAddress.h>
#import <Contacts/CNSocialProfile.h>
#import <Contacts/CNContactRelation.h>

CNLabeledValue是一个泛型的类,可以使用如下方法直接返回一个CNLabeledValue类型

+ (instancetype)labeledValueWithLabel:(nullable NSString *)label value:(ValueType)value;

CNContact里面的属性都是以CNLabeledValue,或是CNLabeledValue数组的形式存在。如果实在难以理解CNLabeledValue到底是什么,可以把它当作一个字典,Label类似于key,Value类似于字典里面的Value。然后联系人属性都是存储字典或是字典数组。
CNPhoneNumber是电话号码类,主要包括了一个属性就是号码,至于到底是家庭号码还是工作号码 需要根据Label区分。
CNPostalAddressCNMutablePostalAddress是邮寄地址也就是联系人地址。
CNSocialProfile是社会化组件信息,比如FaceBook,微博这些
CNInstantMessageAddress是即时通讯信息,比如QQ这些。
CNContactRelation是联系人关系信息。
我们点其中任何一个类的头文件开会发现里面有很多类似如下的定义。

CONTACTS_EXTERN NSString * const CNLabelPhoneNumberiPhone                NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelPhoneNumberMobile                NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelPhoneNumberMain                  NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelPhoneNumberHomeFax               NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelPhoneNumberWorkFax               NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelPhoneNumberOtherFax              NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelPhoneNumberPager 

他们是用于操作这些信息的Label,或是Key,用到什么再去找具体的就好。

#import <Contacts/CNContact.h>
#import <Contacts/CNContact+Predicates.h>
#import <Contacts/CNMutableContact.h>

CNContactCNMutableContact不用多说,是系统用于存储联系人信息类。CNContact+Predicates是用于联系人过滤筛选的类。

#import <Contacts/CNContactStore.h>
#import <Contacts/CNContactFetchRequest.h>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值