首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速获取与ContactsUI的所有联系电话号码

快速获取与ContactsUI的所有联系电话号码
EN

Stack Overflow用户
提问于 2019-11-16 09:38:59
回答 2查看 2.6K关注 0票数 3

我使用ContactsUI获取所有联系人,并在tableview .In中显示它们,我的方法是只获取一个联系人的电话号码。我的问题是如何在我的方法中获取所有的联系电话号码。

我的模型和方法:

代码语言:javascript
复制
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
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-16 09:48:29

与其将其作为字符串,不如使用字符串数组。

代码语言:javascript
复制
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
    }
}
票数 3
EN

Stack Overflow用户

发布于 2019-11-16 09:50:50

您可以从contact frameworkiOS 9开始访问联系人。

联系人框架不仅提供来自你iphone或ipad设备数据库的联系人,而且还提供来自iCloud帐户等各种来源的联系人,然后返回相关的联系人。我们还可以使用此联系人框架搜索和筛选联系人。

1)创建一个CNContactStore实例

代码语言:javascript
复制
let store = CNContactStore()

2)在用户联系人信息中添加所需的密钥。

代码语言:javascript
复制
let keysToFetch = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey,CNContactNicknameKey]

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

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

注意:不要忘记在info.plist

中添加访问联系人信息的隐私描述

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58889378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档