使用 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 数字数组中。