私はあなたに私のコードをあげるので、私は同様の問題に取り組んできました。私が見つけたいくつかの異なるスレッド(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の配列を返しますキーを変更するだけで電話番号を増やすことができます)、配列内の各連絡先とラベルを繰り返して、電話番号を電話番号配列に文字列として挿入します。
これまでに試したことをお見せできますか? – Randy
申し訳ありませんが、私のコード全体が元に戻ってしまいました。 –
本当にあなたの連絡先を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