2016-05-27 1 views
1

アドレス帳からいくつかの連絡先を既存の電話番号のセットでフィルタリングしようとしました。 CNContactPickerViewControllerは、既存の電話番号と一致する電話番号がある場合、これらの連絡先の選択を無効にする必要があります。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 %@)[email protected] == 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:てみました。ブロックベースの述語はまったくサポートしていません。

からWWDC 2015 Introducing the Contacts Framework for iOS and OS X session。 彼らはpredicateForEnablingContactが 'CNContact'で評価されていると言いました。この文書では、述語がCNContact+PredicatesCNContactFetchRequestなど)でなければならないとは言いません。

答えて

2

既に問題が見つかりました。この問題を抱えたとき、私の髪はほとんどなくなりました。解決策はアポストロフィを価値に加えることです。このように

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

私はこれがあなたを助けてくれることを願っています。

関連する問題