Я пытаюсь отфильтровать некоторые контакты из адресной книги с набором существующих телефонных номеров. 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
.