2

我正在尝试获取显示特定“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”来完成?

我知道苹果不允许海关除...

predicateForContactsMatchingName // predicateForContactsInContainerWithIdentifier predicateForContactsWithIdentifiers // predicateForContactsInGroupWithIdentifier

但是,如果直接根不可用,我正在寻找解决方法......?

提前谢谢了。

4

2 回答 2

1

获取所有 联系人后,您可以再使用一个谓词:

let prefixPredicate = NSPredicate(format: "namePrefix = 'smth'")
let searchedByPrefix = (fetchedContacts as NSArray)
print(searchedByPrefix.filteredArrayUsingPredicate(prefixPredicate))

其中 'smth' 是您要查找的字符串值。

如果您正在寻找使用联系人框架的直接方式,那么在我看来,没有这样的解决方案。

于 2016-05-24T13:43:07.407 回答
0

@T。Pasichnyk - 感谢您第一次提出“获取所有联系人”的想法。我使用了这个,然后使用了以下代码来过滤 namePrefix 以给出个人名称和使用次数。

var counterForPrefix = Int()

    do {
        let results = try CNContactStore().unifiedContactsMatchingPredicate(predicate, keysToFetch: keysToFetch)

        if results.isEmpty {
            print("nothing in Contacts")

        } else {

            for result in results {

                if result.namePrefix == "S." {
                    print(result.givenName)
                    counterForPrefix += 1
                }
            }
            print(counterForPrefix)
        }
    } catch {
    }
于 2016-05-24T16:54:43.233 回答