使用 Swift 3 从手机和商店获取联系人到 sqliteDB
Fetching Contacts from mobile and store to sqliteDB using Swift 3
我是 Swift 3 语言的新手,我想从数组中的 phone 获取联系人,然后存储在 sqliteDB 中。请帮忙。
我看到了 Swift 2.1 的旧教程,但所有这些方法都已弃用,我尝试了很多 CNContacts
但这对我没有帮助。
我也试过这个 link 的 Stack Overflow 但没有得到任何帮助:
我一直在处理类似的问题,所以我会给你我的代码。我从我发现的几个不同线程(包括 )中将其组合在一起。我们的要求是只从所有联系人中单独获取 phone 号码并将其放入字符串数组中,但您可以轻松修改它以执行更多操作:
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()
})
}
这会遍历所有容器和 returns CNObjects 数组(内部只有 phone 数字,但您可以通过更改键使其获得更多)然后遍历每个数组内的联系和标签仅将 phone 数字作为字符串插入到 Phone 数字数组中。
我是 Swift 3 语言的新手,我想从数组中的 phone 获取联系人,然后存储在 sqliteDB 中。请帮忙。
我看到了 Swift 2.1 的旧教程,但所有这些方法都已弃用,我尝试了很多 CNContacts
但这对我没有帮助。
我也试过这个 link 的 Stack Overflow 但没有得到任何帮助:
我一直在处理类似的问题,所以我会给你我的代码。我从我发现的几个不同线程(包括
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()
})
}
这会遍历所有容器和 returns CNObjects 数组(内部只有 phone 数字,但您可以通过更改键使其获得更多)然后遍历每个数组内的联系和标签仅将 phone 数字作为字符串插入到 Phone 数字数组中。