2017-02-13 97 views
0

我發現的大部分內容都是使用AddressBook代替新聯繫人。我試圖將所有用戶聯繫人的姓名和電話號碼顯示在應用程序的桌面視圖中。然後把所有這些數字都放到一個交叉引用的API中,以確定它們中的任何一個是否已經有帳戶,所以我可以在旁邊顯示一個「添加朋友」按鈕。有沒有一種簡單易行的方法來獲得權限,然後使用Swift3將所有聯繫人放入數組中,並與iOS9和更新版本兼容?提取所有用戶的聯繫電話號碼Swift3/iOS9 +

我不是試圖找到或添加聯繫人,我只是想在下面

+1

官方文件是開始這類問題的好地方。 –

回答

10

兩個片斷陣列中的所有號碼和名稱應該有所幫助。我已仔細宣佈店,你就不需要,如果你在同一範圍內使用這兩個片段做...

獲得許可:

let store = CNContactStore() 
    store.requestAccess(for: .contacts) { (isGranted, error) in 
     // Check the isGranted flag and proceed if true 
    } 

要讀取的地址簿(我包括一些隨機的鑰匙,但你可以選擇適合你的任何鑰匙。):

let contactStore = CNContactStore() 
    let keys = [CNContactPhoneNumbersKey, CNContactFamilyNameKey, CNContactGivenNameKey, CNContactNicknameKey, CNContactPhoneNumbersKey] 
    let request1 = CNContactFetchRequest(keysToFetch: keys as [CNKeyDescriptor]) 

    try? contactStore.enumerateContacts(with: request1) { (contact, error) in 
     for phone in contact.phoneNumbers { 
      // Whatever you want to do with it 
     } 
    } 
+1

爲什麼當閉包本身會給你提供一個你需要檢查的錯誤時,你會發現一個錯誤? –

+0

糟糕!我從我的代碼中複製了這些內容,並去除了額外的垃圾。在我的代碼中,我正在做一些可以拋出關閉的東西,但忘記了把do/catch拿出來。我將編輯答案。 – ghostatron

+0

,絕對有幫助!你在一些函數中調用了第二個代碼片段,或者在'lazy var contacts:[CNContact] = {/ * here * /}()'中調用了第二個片段,如http://stackoverflow.com/a/39066564/2868510 –

相關問題