- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试获取显示特定“namePrefix”(例如先生、夫人或小姐等)的所有联系人的列表。然而,遇到了一堵砖墙。
我将以下代码与 Predicate 一起使用以获得名称搜索的结果,这很好...
let store = CNContactStore()
let keysToFetch = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactNamePrefixKey, CNContactPhoneNumbersKey]
// Predicate = prob...? How get namePrefix
let predicate = CNContact.predicateForContactsMatchingName("James")
do {
let fetchedContacts = try store.unifiedContactsMatchingPredicate(predicate, keysToFetch: keysToFetch)
for result in fetchedContacts {
print("\(result.givenName) \(result.familyName) \(result.phoneNumbers) \(result.namePrefix)")
}
} catch {
print("Error unable to fetch")
}
但是,我需要“namePrefix”。Apple 文档显示 namePrefix 可作为属性使用,但经过反复试验,无法找到一种方法来使用它来使用“谓词”过滤我的结果。我认为可能有可能使用...“predicateForContactsWithIdentifiers”但无法找到示例。
我想知道 namePrefix 过滤器是否可以通过上面的谓词行以某种方式完成?或者如果不能,是否可以使用“predicateForContactsWithIdentifiers”来完成?
我了解 Apple 不允许对除...以外的谓词进行自定义
predicateForContactsMatchingName//predicateForContactsInContainerWithIdentifierpredicateForContactsWithIdentifiers//predicateForContactsInGroupWithIdentifier
但是,如果直接根目录不可用,我正在寻找解决方法...?
非常感谢。
最佳答案
获取所有联系人后,您可以再使用一个谓词:
let prefixPredicate = NSPredicate(format: "namePrefix = 'smth'")
let searchedByPrefix = (fetchedContacts as NSArray)
print(searchedByPrefix.filteredArrayUsingPredicate(prefixPredicate))
其中“smth”是您要查找的字符串值。
如果您正在寻找使用联系人框架的直接方式,那么在我看来没有这样的解决方案。
关于ios - swift 联系人框架,谓词带有 namePrefix 而不是名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37413424/
我正在尝试获取显示特定“namePrefix”(例如先生、夫人或小姐等)的所有联系人的列表。然而,遇到了一堵砖墙。 我将以下代码与 Predicate 一起使用以获得名称搜索的结果,这很好... le
我是一名优秀的程序员,十分优秀!