本周腾出一些时间翻译了CNContact相关的文档,整理如下:
Introduction
CNContact 是iOS9提供的全新的获取手机通讯录类,提供通讯录中姓名、电话号码等等,并且是线程安全的。CNContact类似于一个复杂的foundation集合,同样的有一个可变类型的子类CNMutableContact。每一份通讯录(其实指每一个联系人)都有唯一的ID,通过identifier属性便可获取到。
Properties
1.标示相关属性
identifier
该设备上通讯录唯一的ID(只读)
Discussion
你可以通过identifier来重新获取通讯录。APP launch过程中就可保存identifier。注意这个identifier在当前设备上是独一无二的。
2.日期相关属性
nonGregorianBirthday
通讯录中阴历生日(只读)
Discussion
NSDateComponents类型的属性,用来表示通讯录中阴历的生日。生日中必须有月和日,年份和闰月属于可选项。日历属性必须有值且必须是阴历。支持阴历的日历有,佛教,中文,伊斯兰教。
dates
包含阳历日期的数组(只读)
Discussion
dates是一个包含CNLabeledValue对象的数组,每一个CNLabeledValue对象都有一个label和value属性。你可以用这个属性才存储阳历日期,例如周年纪念日等等。日历属性可以为空或者是阳历。
3.名字相关属性
namePrefix
通讯录中的名字前缀(只读)
givenName
名字分 姓-名 这里指的是名字,不包含姓. (只读)
Discussion
一个人的名字包含姓氏+名字,given name相当于first name,既不包含姓的名字。
2)middleName
中间的名字(只读)
很多歪果仁的名字都是XX middleName XXX 这样表示的
3)familyName
姓氏(只读)
Discussion
相当于last name,表示姓氏
后续还有很多名字相关属性 都简单易懂 就不一一介绍了
4.地理位置相关
(+)localizedStringForKey:
参数
标识地理位置的key
返回值
通讯录中对应的地理位置
Discussion
这个方法通过通讯录的key返回对应的地理位置
5.通讯录排序
(1)+ descriptorForAllComparatorKeys
获取所有用来通讯录排序比较的key
返回值
有序对比的所有key
Discussion
这个方法会执行CNKeyDescriptor协议的方法,并且可以作为一个数组用在当获取通讯录对应的key
(2)+ comparatorForNameSortOrder:
按照特殊的顺序返回比较器
Parameters
- sortOrder想要的排序顺序,比如按照名字排序
- Return Value返回对通讯录排序的NSComparator对象
6.电话号码
1)phoneNumbers
通讯录中被标识为电话号码的数组(只读)
Discussion
这是一个包含CNLabeledValue对象的数组,每一个CNLabeledValue对象有一个label和CNPhoneNumber值,也就是说,要想获得电话号码,需要使用CNPhoneNumber。
7.图片相关属性
1)imageData
通讯录个人照片(只读)
Discussion
建议当你需要获取通讯录中某人照片的时候使用该属性,比方说你需要展示通讯录中个人的照片。
2)thumbnailImageData
通讯录中个人照片的缩略图(只读)
Discussion
thumbnailImageData属性是由imageData衍生而来,包含从名片或者编辑通讯录的时候获取到的imageData。建议当你需要获取通讯录中某人照片缩略图的时候使用该属性,比方说你需要展示通讯录中个人的照片的缩略图。
3)imageDataAvailable
表示一份通讯录中有没有个人照片(只读)
Discussion
这是一个包含CNLabeledValue对象的数组。每一个CNLabeledValue对象都有一个label和CNContactRelation类型的值。其实当填写通讯录名字的时候这个属性便有值了,CNContactRelation就是表示通讯录关系的名字。
8.标识值属性
1)contactRelations
通讯录中的标识关系的数组(只读)
2)instantMessageAddresses
通讯录中标识即时通讯地址的数组(只读)
Discussion
这是一个包含CNLabeledValue对象的数组。每一个CNLabeledValue对象都有一个label和CNInstantMessageAddress类型的值。
9.通讯录谓词
下面介绍获取通讯录内容最重要的方法:
使用断言去匹配通讯录。你只可以在CNContactStore 和 CNContactFetchRequest中使用这些谓词。
1)+ predicateForContactsMatchingName:
返回一个能根据联系人名字找到匹配的通讯的谓词
参数
- name
- 要去匹配的通讯录名称
返回值
返回一个用来从CNContactStore获取通讯录的谓词
Discussion
名字的文字数量不限
2)+ predicateForContactsWithIdentifiers:
返回一个能根据特定ID找到匹配的通讯的谓词
参数
- identifiers
- 通讯录ID
返回值
返回一个用来从CNContactStore获取通讯录的谓词
3)+ predicateForContactsInGroupWithIdentifier:
返回根据ID获取特殊群的通讯录成员的谓词。
参数
- groupIdentifier
- 通讯录群组ID
返回值
返回一个用来从CNContactStore获取通讯录的断言。
4)+ predicateForContactsInContainerWithIdentifier:
返回一个能根据特定容器ID找到匹配的通讯的断言。
参数
- containerIdentifier
- 容器ID
返回值
返回一个用来从CNContactStore获取通讯录的断言。
10.可获取局部通讯录信息
1)- isKeyAvailable:
决定是否能够获取特殊关键key的通讯录属性值
返回值
如果可以获取则返回yes,否则返回no。
Discussion
isKeyAvailable: 或者 areKeysAvailable:这两个方法都可以在你不确定是否能够根据key获取到对应的值的时候使用。如果这个方法返回NO,可以通过通讯录ID和其他的key来重新获取。可以通过CNContactPropertyNotFetchedExceptionName来得到没有获取过的属性
2)- areKeysAvailable:
同上
11.Constants相关常量
1)CNContactSortOrder 通讯录顺序
typedef enum: NSInteger {
CNContactSortOrderNone,无序
CNContactSortOrderUserDefault,用户偏好排序
CNContactSortOrderGivenName,名字排序
CNContactSortOrderFamilyName,姓氏排序
}CNContactSortOrder;
2)Exception Handling 异常处理
获取属性值没有获取到的时候抛出异常
- NSString * const CNContactPropertyNotFetchedExceptionName
3)Identifier
即时获取到的属性ID
- NSString * const CNContactIdentifierKey 字符串,通讯录唯一的ID
4)Metadata Keys 元数据key
预先定义好的一系列代表通讯录各个属性的key,可以用来对CNContact 对象的键值编码。
- NSString * const CNContactNamePrefixKey 姓名前缀
- NSString * const CNContactGivenNameKey 名字
- NSString * const CNContactMiddleNameKey 中间名字
- NSString * const CNContactFamilyNameKey 姓氏
- NSString * const CNContactPreviousFamilyNameKey 少女出嫁前的形式
- NSString * const CNContactNameSuffixKey 名字后缀
- NSString * const CNContactNicknameKey 绰号
- NSString * const CNContactPhoneticGivenNameKey
- NSString * const CNContactPhoneticMiddleNameKey
- NSString * const CNContactPhoneticFamilyNameKey
- NSString * const CNContactOrganizationNameKey
- NSString * const CNContactDepartmentNameKey 部门名称
- NSString * const CNContactJobTitleKey 工作职称
- NSString * const CNContactBirthdayKey 生日
- NSString * const CNContactNonGregorianBirthdayKey 阴历生日
- NSString * const CNContactNoteKey
- NSString * const CNContactImageDataKey 图片数据
- NSString * const CNContactThumbnailImageDataKey 缩略图数据
- NSString * const CNContactImageDataAvailableKey 是否能获取图片数据
- NSString * const CNContactTypeKey 通讯录类型
- NSString * const CNContactPhoneNumbersKey 电话号码
- NSString * const CNContactEmailAddressesKey 电子邮件
- NSString * const CNContactPostalAddressesKey 邮政地址
- NSString * const CNContactUrlAddressesKey URL地址
- NSString * const CNContactRelationsKey 通讯录关系
- NSString * const CNContactSocialProfilesKey 社交个人信息
- NSString * const CNContactInstantMessageAddressesKey 即时通讯地址