gpt4 book ai didi

ios - 如何使用 CNContactPickerViewController 使用一组电话号码过滤联系人?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:06:01 26 4
gpt4 key购买 nike

我尝试使用一组现有电话号码从地址簿中过滤一些联系人。 CNContactPickerViewController 应该在这些联系人从现有电话号码中找到匹配的电话号码时禁止选择这些联系人。

我需要使用电话号码作为过滤器,因为这些电话号码可能来自其他应用程序平台。并且该服务不应允许用户使用已经存在的相同电话号码的联系人。我不想为此快速操作创建自己的联系人选择器。

这是我到目前为止尝试过的方法。

NSArray<CNPhoneNumber *> *existingPhoneNumbers = @[@"1111", @"2222"];

CNContactPickerViewController *contactPicker = [[CNContactPickerViewController alloc] init];
contactPicker.delegate = self;
contactPicker.displayedPropertyKeys = @[CNContactNamePrefixKey,
CNContactGivenNameKey,
CNContactFamilyNameKey,
CNContactOrganizationNameKey,
CNContactPhoneNumbersKey];

NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"NOT (ANY phoneNumbers.value.stringValue IN %@)", existingPhoneNumbers];

contactPicker.predicateForEnablingContact = predicates;

错误信息:

[CNUI ERROR] Error when showing picker: Error Domain=CNErrorDomain Code=300 "(null)" UserInfo={CNValidationErrors=(
"Error Domain=CNErrorDomain Code=400 \"Invalid Predicate\" UserInfo={CNKeyPaths=(\n \"phoneNumbers.value.stringValue\"\n), NSLocalizedDescription=Invalid Predicate, NSLocalizedFailureReason=The operation couldn't be completed because its predicate is invalid.}")}

使用 SUBQUERY 它仍然无法正常工作。

NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"SUBQUERY(phoneNumbers, $CNLabeledValue,$CNLabeledValue.value.stringValue IN %@).@count == 0"];

错误信息:

[CNUI ERROR] Error when showing picker: Error Domain=CNErrorDomain Code=300 "(null)" UserInfo={CNValidationErrors=(
"Error Domain=CNErrorDomain Code=400 \"Invalid Predicate\" UserInfo={CNKeyPaths=(\n \"value.stringValue\"\n), NSLocalizedDescription=Invalid Predicate, NSLocalizedFailureReason=The operation couldn't be completed because its predicate is invalid.}")}

还尝试使用 predicateWithBlock:。它根本不支持基于 block 的谓词。

来自 WWDC 2015 Introducing the Contacts Framework for iOS and OS X session .他们说 predicateForEnablingContact 是在“CNContact”上评估的。文档并没有像 CNContactFetchRequest 那样说谓词必须来自 CNContact+Predicates

最佳答案

已经找到问题所在。当我遇到这个问题时,我的头发几乎掉光了。解决方案是在值中添加撇号。像这样

let predicate = NSPredicate(format: "ANY self.phoneNumbers.'value'.'digits' BEGINSWITH %@", "+420" 

希望对你有帮助

关于ios - 如何使用 CNContactPickerViewController 使用一组电话号码过滤联系人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37481483/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com