一尘不染

在ios Swift中获取所有联系人?

swift

我知道ios swift有一个Contacts
Framework
,可以在其中获取联系人,但是找不到任何方法可以一起获取所有联系人,而我可以从该数组访问每个联系人。所有用于获取联系人的方法似乎都需要某种条件。有什么方法可以将所有联系人聚集在一起?

谢谢


阅读 228

收藏
2020-07-07

共1个答案

一尘不染

有关Contact Framework问题的许多答案都建议对各种容器(帐户)进行迭代。但是,Apple文档将“统一联系人”描述为

代表同一个人的不同帐户中的联系人可能会自动链接在一起。链接的联系人在OS
X和iOS应用中显示为统一联系人。统一联系人是合并到一个联系人中的一组链接联系人的内存临时视图。

默认情况下,Contacts框架返回统一的联系人。每个提取的统一联系人(CNContact)对象都有其自己的唯一标识符,该标识符不同于链接的联系人集中的任何单个联系人的标识符。应使用其标识符对统一联系人进行重新提取。
资源

因此,在单个数组中获取(部分基于键的)联系人列表的最简单方法是:

    var contacts = [CNContact]()
    let keys = [CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName)]
    let request = CNContactFetchRequest(keysToFetch: keys)

    do {
        try self.contactStore.enumerateContactsWithFetchRequest(request) {             
            (contact, stop) in
            // Array containing all unified contacts from everywhere
            contacts.append(contact)
        }
    } 
    catch {
        print("unable to fetch contacts")
    }
2020-07-07