2017-02-13 18 views
0

私が探しているほとんどのものは、新しい連絡先の代わりにアドレス帳を使用しています。私はすべてのユーザーの連絡先の名前と電話番号を取得して、アプリケーションのテーブルビューに表示しようとしています。そして、それらの番号をすべて、すでにアカウントを持っているかどうかに関わらず相互参照する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 * /}() 'の2番目のスニペットをこのhttp://stackoverflow.com/a/39066564/2868510のように呼び出しますか? –

関連する問題