我是Swift 3语言的新手,我希望从数组中的手机中获取联系人,然后存储在sqliteDB中。请帮忙。
我看到了Swift 2.1的旧教程,但所有这些方法都被弃用了,我尝试了很多CNContacts
,但这对我没用。
我也尝试过Stack Overflow的这个链接,但没有得到任何帮助:
Fetching all contacts in ios Swift?
答案 0 :(得分:0)
我刚刚处理过类似的问题,所以我会给你我的代码。我把它放在我发现的几个不同的线程中(包括this)。我们的要求是只从所有联系人那里获取电话号码并将其放入String数组中,但您可以轻松修改它以执行更多操作:
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数组(只有里面的电话号码但你可以通过更改键来获得更多),然后遍历每个Contact和标签内的标签以插入电话号码作为字符串进入电话号码数组。