從 iOS9 開始 Apple 對聯(lián)系人進(jìn)行了重構(gòu),使用了 Contacts.framework。新的架構(gòu)相對于之前的架構(gòu),獲取聯(lián)系人的方式更加靈活,并且因?yàn)槭?OC (Swift)接口使用起來更加方便。 相對于老的架構(gòu),新的架構(gòu)需要注意的地方主要有一下幾點(diǎn):
新的架構(gòu)讀取聯(lián)系人的時(shí)候需要提前指定需要獲取的數(shù)據(jù)范圍(在 CNContactFetchRequest 中)新的架構(gòu)允許通過 NSPRedicate 來獲取或匹配聯(lián)系人新的架構(gòu)中,聯(lián)系人的位置標(biāo)識符從數(shù)值變成了字符串獲取聯(lián)系人的 fullName 的時(shí)候 AB 架構(gòu)使用ABRecordCopyCompositeName 即可。新的架構(gòu)需要使用 [CNContactFormatter stringFromContact:contact style:CNContactFormatterStyleFullName] ,這里需要注意,使用 CNContactFormatter 來格式化聯(lián)系人名稱時(shí)同樣需要在 CNContactFetchRequest 中聲明,否則會拋異常。聲明的方式為 : // [CNContactFormatter descriptorForRequiredKeysForStyle:CNContactFormatterStyleFullName]用于聲明請求使用 CNContactFormatter 來獲取聯(lián)系人的 fullName[[CNContactFetchRequest alloc] initWithKeysToFetch:@[CNContactIdentifierKey, [CNContactFormatter descriptorForRequiredKeysForStyle:CNContactFormatterStyleFullName]]];Label 是聯(lián)系人中用來區(qū)分同一個(gè)聯(lián)系人下面不同號碼通途的。聯(lián)系人架構(gòu)預(yù)設(shè)了一些 Label 如:工作,住宅等。 這些預(yù)設(shè)的 Label 在 AB 架構(gòu)和新的架構(gòu)中都有統(tǒng)一的格式 _$!<Home>!$_ ,對于這些預(yù)設(shè)的 Label 可以通過系統(tǒng)接口來轉(zhuǎn)換成本地化的語言描述。這些接口是 ABAddressBookCopyLocalizedLabel  或 [CNLabeledValue localizedStringForLabel:label] 。如,參數(shù)為 _$!<Home>!$_ 則轉(zhuǎn)化成中文后為 “家庭” (住宅)。 對于用戶自定義的 Label 則沒有這種特殊結(jié)構(gòu),用戶定義的是什么,接口就返回什么。 可以通過如下代碼獲取到原始的 Label
具體的接口使用可以參考下面兩篇文章 參考文章01 參考文章02
新聞熱點(diǎn)
疑難解答
圖片精選