アドレス帳からいくつかの連絡先を既存の電話番号のセットでフィルタリングしようとしました。 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+Predicates
(CNContactFetchRequest
など)でなければならないとは言いません。