首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用CNContact通过组搜索联系人

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

Stack Overflow用户
提问于 2015-10-07 15:58:27
回答 1查看 3.1K关注 0票数 4

使用Swift2,我试图找到"Work“组的所有联系人,并返回这些联系人。

在创建谓词之后。

代码语言:javascript
运行
复制
let workPred = CNContact.predicateForContactsInGroupWithIdentifier("Work")
let keysToFetch = [CNContactGivenNameKey]
let results = contacts.unifiedContactsMatchingPredicate(workPred, keysToFetch)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-07 18:25:54

"Work"不是组标识符。您必须通过CNContactStore's groupsMatchingPredicate获取组。

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

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

  • name
  • identifier

因此,CNGroup.identifier是您想要在谓词中使用的。CNGroup对象的一个示例:

代码语言:javascript
运行
复制
[
  <CNGroup: 0x7fe563ca91f0: identifier=2DFE28EB-A9CA-4920-A77D-46BEE5A09E96, name=Friends>,
  <CNGroup: 0x7fe563ca3bc0: identifier=E007B6DD-F456-48FA-A564-32256A898B67, name=Work>
]

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

下面是一个例子:

代码语言:javascript
运行
复制
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上)来直接匹配组名。

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

https://stackoverflow.com/questions/32997015

复制
相关文章

相似问题

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