快速获取带有ContactsUI的所有联系人电话号码

我使用ContactsUI获取所有联系人并将其显示在tableview中。在我的方法中,我仅获取了一个联系人的电话号码。我的问题是如何使用我的方法获取联系人的所有电话号码。

我的模型和获取方法:

import Foundation
import UIKit
import Contacts

class ContactsModel : NSObject {
    let givenName:String
    let familyName:String
    let phoneNumber:String
    let emailaddress:String
    var identifier: String
    var image:UIImage

    init(givenName:String,familyName:String,phoneNumber:String,emailaddress:String,identifier:String,image:UIImage) {
        self.givenName = givenName
        self.familyName = familyName
        self.phoneNumber = phoneNumber
        self.emailaddress = emailaddress
        self.identifier = identifier
        self.image = image
    }

    class func generateModelArray() -> [ContactsModel]{
        let contactStore = CNContactStore()
        var contactsData = [ContactsModel]()
        let key = [CNContactGivenNameKey,CNContactFamilyNameKey,CNContactImageDataKey,CNContactThumbnailImageDataKey,CNContactPhoneNumbersKey,CNContactEmailaddressesKey] as [CNKeyDescriptor]
        let request = CNContactFetchRequest(keysToFetch: key)
        try? contactStore.enumerateContacts(with: request,usingBlock: { (contact,stoppingPointer) in
            let givenName = contact.givenName
            let familyName = contact.familyName
            let emailaddress = contact.emailaddresses.first?.value ?? ""
            let phoneNumber = contact.phoneNumbers.first?.value.stringValue ?? ""
            let identifier = contact.identifier
            var image = UIImage()
            if contact.thumbnailImageData != nil{
                image = UIImage(data: contact.thumbnailImageData!)!

            }else if  contact.thumbnailImageData == nil,givenName.isEmpty || familyName.isEmpty{
                image = UIImage(named: "usertwo")!
            }
            contactsData.append(ContactsModel(givenName: givenName,familyName: familyName,phoneNumber: phoneNumber as String,emailaddress: emailaddress as String,identifier: identifier,image: image))
        })
        return contactsData
    }
}
skcheung 回答:快速获取带有ContactsUI的所有联系人电话号码

使用字符串数组代替它作为字符串。

class ContactsModel : NSObject {
    let givenName: String
    let familyName: String
    let phoneNumber: [String]
    let emailAddress: String
    var identifier: String
    var image: UIImage

    init(givenName:String,familyName:String,phoneNumber:[String],emailAddress:String,identifier:String,image:UIImage) {
        self.givenName = givenName
        self.familyName = familyName
        self.phoneNumber = phoneNumber
        self.emailAddress = emailAddress
        self.identifier = identifier
        self.image = image
    }

    class func generateModelArray() -> [ContactsModel]{
        let contactStore = CNContactStore()
        var contactsData = [ContactsModel]()
        let key = [CNContactGivenNameKey,CNContactFamilyNameKey,CNContactImageDataKey,CNContactThumbnailImageDataKey,CNContactPhoneNumbersKey,CNContactEmailAddressesKey] as [CNKeyDescriptor]
        let request = CNContactFetchRequest(keysToFetch: key)
        try? contactStore.enumerateContacts(with: request,usingBlock: { (contact,stoppingPointer) in
            let givenName = contact.givenName
            let familyName = contact.familyName
            let emailAddress = contact.emailAddresses.first?.value ?? ""
            let phoneNumber: [String] = contact.phoneNumbers.map{ $0.value.stringValue }
            let identifier = contact.identifier
            var image = UIImage()
            if contact.thumbnailImageData != nil{
                image = UIImage(data: contact.thumbnailImageData!)!

            }else if  contact.thumbnailImageData == nil,givenName.isEmpty || familyName.isEmpty{
                image = UIImage(named: "usertwo")!
            }
            contactsData.append(ContactsModel(givenName: givenName,familyName: familyName,phoneNumber: phoneNumber,emailAddress: emailAddress as String,identifier: identifier,image: image))
        })
        return contactsData
    }
}
,

您可以从contact framework开始,从iOS 9访问联系人。

Contacts Framework不仅从您的iPhone或ipad设备的数据库中提供联系人,而且还从iCloud帐户等各种来源提供联系人,然后返回关联的联系人。我们还可以使用此Contacts Framework搜索和过滤联系人。

1)创建CNContactStore的实例

let store = CNContactStore()

2)在用户联系信息中添加所需的键

let keysToFetch = [CNContactGivenNameKey,CNContactNicknameKey]

3)执行查询以获取所有用户名

   do {
        try store.enumerateContacts(with: CNContactFetchRequest.init(keysToFetch: keysToFetch as [CNKeyDescriptor]),pointer) -> Void in
            print("contact = ","\(contact)")
            // Here Append this contact into your ViewModel Array.
        })
    } catch {
        print("something wrong happened")
    }
  

注意:不要忘记添加用于访问联系人的隐私说明   信息放入info.plist

本文链接:https://www.f2er.com/3090771.html

大家都在问