2016-12-06 1 views
1

私はSwift 3言語で新しく、電話機から連絡先を取り出して、sqliteDBに格納したいと考えています。助けてください。Swiftを使用してモバイルから連絡先を取得し、sqliteDBに保存する3

私はSwift 2.1の古いチュートリアルを見ましたが、これらのメソッドはすべて廃止されました。私はCNContactsでたくさん試しましたが、これは役に立たなかったです。

私はまた、スタックオーバーフローのこのリンクを試みたが、いずれかの助けを取得できませんでした:
Fetching all contacts in ios Swift?

+0

これまでに試したことをお見せできますか? – Randy

+0

申し訳ありませんが、私のコード全体が元に戻ってしまいました。 –

+0

本当にあなたの連絡先をsqlite DBに保存しますか?あなたには素晴らしい選択肢があります。私は通常、[Realm](https://realm.io/)にアクセスしますが、[CoreData](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/index)を使用することもできます。 html?utm_source = iosstash.io) 連絡先を取得するには、[この回答](http://stackoverflow.com/a/34095632/3844377)をチェックしてください – Randy

答えて

0

私はあなたに私のコードをあげるので、私は同様の問題に取り組んできました。私が見つけたいくつかの異なるスレッド(thisを含む)からまとめました。私たちの要件は、ちょうどすべての連絡先からだけで電話番号を取得し、文字列の配列にそれを置くことですが、あなたは簡単に多くを行うには、これを修正することができます:

func getContacts(){ 

    contactStore.requestAccess(for: .contacts, completionHandler: { 
     granted, error in 

     var contacts: [CNContact] = { 
      let contactStore = CNContactStore() 

      //Change keys here to retreive more than just the phone number of the contact 
      let keysToFetch = [CNContactPhoneNumbersKey] 

      // Get all the containers 
      var allContainers: [CNContainer] = [] 
      do { 
       allContainers = try contactStore.containers(matching: nil) 
      } catch { 
       print("Error fetching containers") 
      } 

      var results: [CNContact] = [] 

      // Iterate all containers and append their contacts to our results array 
      for container in allContainers { 

       let fetchPredicate = CNContact.predicateForContactsInContainer(withIdentifier: container.identifier) 

       do { 

        let containerResults = try contactStore.unifiedContacts(matching: fetchPredicate, keysToFetch: keysToFetch as [CNKeyDescriptor]) 

        results.append(contentsOf: containerResults) 

        for phone in results{ 

         for labeledValue in phone.phoneNumbers{ 
          self.phoneNumbersArray.append(labeledValue.value.stringValue) 
         } 
        } 

       } catch { 
        print("Error fetching results for container") 
       } 
      } 

      return results 
     }() 

     self.getFriendsFromPhoneNumbers() 
    }) 
} 

これは、(すべてのコンテナを通過し、CNObjectsの配列を返しますキーを変更するだけで電話番号を増やすことができます)、配列内の各連絡先とラベルを繰り返して、電話番号を電話番号配列に文字列として挿入します。

+0

それは私のために働く。 firstNameとfamilyNameを取得するにはどうすればよいですか? –

+0

より多くのキーを使用する必要があります:[CNContactGivenNameKey、CNContactFamilyNameKey] –

+0

私は既にキーを変更しましたが、私はこれをループ用に書く必要があります ///////////////// ////// のphone.phoneNumbers { の印刷(labeledValue.value.stringValue) } –

関連する問題