我正在尝试使用Swift2查找属于“工作”组成员的所有联系人,并仅返回这些联系人。
创建谓词后。
let workPred = CNContact.predicateForContactsInGroupWithIdentifier("Work")
let keysToFetch = [CNContactGivenNameKey]
let results = contacts.unifiedContactsMatchingPredicate(workPred, keysToFetch)
但是,当有组ID的联系人时,它总是返回0结果。
"Work"
不是组标识符。您可以通过获取组CNContactStore
的groupsMatchingPredicate
:
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] 删除。
我来说两句