使用Swift2,我试图找到"Work“组的所有联系人,并返回这些联系人。
在创建谓词之后。
let workPred = CNContact.predicateForContactsInGroupWithIdentifier("Work")
let keysToFetch = [CNContactGivenNameKey]
let results = contacts.unifiedContactsMatchingPredicate(workPred, keysToFetch)但是,当有组id的联系人时,它总是返回0的结果。
发布于 2015-10-07 18:25:54
"Work"不是组标识符。您必须通过CNContactStore's 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上)来直接匹配组名。
https://stackoverflow.com/questions/32997015
复制相似问题