iOS 联系人框架 : How to fetch contacts by phone number

标签 ios swift macos cncontact

我有一个自定义的 User 类,它存储用户的电话号码。

class User {
  let phoneNumber: String
}

如何从用户通讯录中获取对应的联系人?

我尝试了以下方法,但这似乎只适用于联系人姓名,因为我总是得到 nil:

let predicate = CNContact.predicateForContactsMatchingName(userInstance.phoneNumber)
let keysToFetch = [CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName), CNContactPhoneNumbersKey]

// Is already permitted
try! CNContactStore().unifiedContactsMatchingPredicate(predicate, keysToFetch: keysToFetch).first  // This returns nil

我在文档中进行了搜索,但没有找到合适的解决方案。

最佳答案

let contactStroe = CNContactStore()
        let keysToFetch = [
            CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName),
            CNContactEmailAddressesKey,
            CNContactPhoneNumbersKey,
            CNContactImageDataAvailableKey,
            CNContactThumbnailImageDataKey]
contactStroe.requestAccessForEntityType(.Contacts, completionHandler: { (granted, error) -> Void in
if granted {
                let predicate = CNContact.predicateForContactsInContainerWithIdentifier(contactStroe.defaultContainerIdentifier())
                var contacts: [CNContact]! = []
                do {
                    contacts = try contactStroe.unifiedContactsMatchingPredicate(predicate, keysToFetch: keysToFetch)// [CNContact]
                }catch {

                }
for contact in contacts {
                    var phoneStr = ""
                    var nameStr = ""
                    var number: CNPhoneNumber!
                    if contact.phoneNumbers.count > 0 {
                        number = contact.phoneNumbers[0].value as! CNPhoneNumber
                        phoneStr = number.stringValue.stringByReplacingOccurrencesOfString("-", withString: "")
                    }
                    nameStr = contact.familyName + contact.givenName
                    if !nameStr.isEmpty && !phoneStr.isEmpty {
                        let friend = YFriendsModel()
                        friend.name = nameStr
                        friend.phone = phoneStr
                        self.friendArr.append(friend)
                    }

                }

        })

这是我的方法,你可以试试

关于iOS 联系人框架 : How to fetch contacts by phone number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34838318/

相关文章:

ios - 如何使 iOS 通知在屏幕上停留的时间更长,类似于 Hangouts 或 Facebook Messenger?

javascript - Videojs和clappr直播总是在直播时打开,如何禁用?

objective-c - FBSDKLoginManager错误代码308并且单例无法解决它

具有跨多行正前瞻性的正则表达式

javascript - 在 macOS 上写入 Node.js 中的 ~/Documents 文件夹?

iPhone 协议(protocol)委托(delegate)传递数据

ios - 在 iOS App 中打开 .ics 文件

ios - 解析注销函数

ios - 根据tableviewcell将值传递给另一个viewcontroller

Swift 3 macOS,设置默认按钮样式