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