使用CNContact通过群组搜索联系人

西蒙

我正在尝试使用Swift2查找属于“工作”组成员的所有联系人,并仅返回这些联系人。

创建谓词后。

let workPred = CNContact.predicateForContactsInGroupWithIdentifier("Work")
let keysToFetch = [CNContactGivenNameKey]
let results = contacts.unifiedContactsMatchingPredicate(workPred, keysToFetch)

但是,当有组ID的联系人时,它总是返回0结果。

红发女郎

"Work"不是组标识符。您可以通过获取组CNContactStoregroupsMatchingPredicate

  • func groupsMatchingPredicate(_ predicate: NSPredicate?) throws -> [CNGroup]

然后,您将获得一个CNGroup对象数组每个CNGroup都有两个属性:

  • name
  • identifier

所以,CNGroup.identifier是要在谓语使用什么。CNGroup对象的示例

[
  <CNGroup: 0x7fe563ca91f0: identifier=2DFE28EB-A9CA-4920-A77D-46BEE5A09E96, name=Friends>,
  <CNGroup: 0x7fe563ca3bc0: identifier=E007B6DD-F456-48FA-A564-32256A898B67, name=Work>
]

在这里您可以看到标识符是生成的UUID。不是组名。

这是一个例子:

do {
  let store = CNContactStore()

  let groups = try store.groupsMatchingPredicate(nil)
  let filteredGroups = groups.filter { $0.name == "Work" }

  guard let workGroup = filteredGroups.first else {
    print("No Work group")
    return
  }

  let predicate = CNContact.predicateForContactsInGroupWithIdentifier(workGroup.identifier)
  let keysToFetch = [CNContactGivenNameKey]
  let contacts = try store.unifiedContactsMatchingPredicate(predicate, keysToFetch: keysToFetch)

  print(contacts)
}
catch {
  print("Handle error")
}

找不到任何合适的谓词(位于上CNGroup)以直接匹配组名。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章