Я просто работаю над подобной проблемой, так что я дам вам свой код. Я собрал его из нескольких разных тем, которые я нашел (включая 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? У вас есть отличные альтернативы. Обычно я использую [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