Gavin Hope
Gavin Hope

Reputation: 2193

ABPeoplePickerNavigationController predicateForEnablingPerson - What is the Predicate Format for Street Address?

With iOS 8 ABPeoplePickerNavigationController has:

// Optionally determines if a person can be selected or not.
// If not set, all persons will be selectable.
//
@property(nonatomic,copy) NSPredicate *predicateForEnablingPerson NS_AVAILABLE_IOS(8_0);

I'd like to disable the address book contacts that don't have a street address.

I've seen (and tested) the following, which only enables contacts with at least one email address:

if ([peoplePickerNavigationController respondsToSelector:@selector(predicateForEnablingPerson)]) {
        peoplePickerNavigationController.predicateForEnablingPerson = [NSPredicate predicateWithFormat:@"emailAddresses.@count > 0"];
    }

What do I replace the string "emailAddresses.@count > 0" with in order to only enable contacts with at least one street address?

Upvotes: 3

Views: 726

Answers (1)

Rob
Rob

Reputation: 437552

You can use:

controller.predicateForEnablingPerson = [NSPredicate predicateWithFormat:@"%K.@count > 0", ABPersonPostalAddressesProperty];

The header gives a list of the acceptable constants to be used in predicates:

// Constants to use in predicates:
// A LabeledValue has a 'label' property and a 'value' property.
// A PhoneNumber has a 'stringValue' property, a 'countryCode' property, a 'formattedStringValue' property and a 'normalizedStringValue' property
// A InstantMessageAddress has a 'username' property and a 'service' property
// A SocialProfile has a 'username' property and a 'service' property
// A PostalAddress has a 'street' property, a 'subLocality' property, a 'city' property, a 'subAdministrativeArea' property, a 'state' property, a 'postalCode' property, a 'country' property and a 'ISOCountryCode' property
//
extern NSString * const ABPersonNamePrefixProperty NS_AVAILABLE_IOS(8_0);               // "namePrefix"                 NSString
extern NSString * const ABPersonGivenNameProperty NS_AVAILABLE_IOS(8_0);                // "givenName"                  NSString
extern NSString * const ABPersonMiddleNameProperty NS_AVAILABLE_IOS(8_0);               // "middleName"                 NSString
extern NSString * const ABPersonFamilyNameProperty NS_AVAILABLE_IOS(8_0);               // "familyName"                 NSString
extern NSString * const ABPersonNameSuffixProperty NS_AVAILABLE_IOS(8_0);               // "nameSuffix"                 NSString
extern NSString * const ABPersonPreviousFamilyNameProperty NS_AVAILABLE_IOS(8_0);       // "previousFamilyName"         NSString
extern NSString * const ABPersonNicknameProperty NS_AVAILABLE_IOS(8_0);                 // "nickname"                   NSString
extern NSString * const ABPersonPhoneticGivenNameProperty NS_AVAILABLE_IOS(8_0);        // "phoneticGivenName"          NSString
extern NSString * const ABPersonPhoneticMiddleNameProperty NS_AVAILABLE_IOS(8_0);       // "phoneticMiddleName"         NSString
extern NSString * const ABPersonPhoneticFamilyNameProperty NS_AVAILABLE_IOS(8_0);       // "phoneticFamilyName"         NSString
extern NSString * const ABPersonOrganizationNameProperty NS_AVAILABLE_IOS(8_0);         // "organizationName"           NSString
extern NSString * const ABPersonDepartmentNameProperty NS_AVAILABLE_IOS(8_0);           // "departmentName"             NSString
extern NSString * const ABPersonJobTitleProperty NS_AVAILABLE_IOS(8_0);                 // "jobTitle"                   NSString
extern NSString * const ABPersonBirthdayProperty NS_AVAILABLE_IOS(8_0);                 // "birthday"                   NSDateComponents
extern NSString * const ABPersonNoteProperty NS_AVAILABLE_IOS(8_0);                     // "note"                       NSString
extern NSString * const ABPersonPhoneNumbersProperty NS_AVAILABLE_IOS(8_0);             // "phoneNumbers"               array of LabeledValue with PhoneNumber values
extern NSString * const ABPersonEmailAddressesProperty NS_AVAILABLE_IOS(8_0);           // "emailAddresses"             array of LabeledValue with NSString values
extern NSString * const ABPersonUrlAddressesProperty NS_AVAILABLE_IOS(8_0);             // "urlAddresses"               array of LabeledValue with NSString values
extern NSString * const ABPersonDatesProperty NS_AVAILABLE_IOS(8_0);                    // "dates"                      array of LabeledValue with NSDateComponents values
extern NSString * const ABPersonInstantMessageAddressesProperty NS_AVAILABLE_IOS(8_0);  // "instantMessageAddresses"    array of LabeledValue with InstantMessageAddress values
extern NSString * const ABPersonRelatedNamesProperty NS_AVAILABLE_IOS(8_0);             // "relatedNames"               array of LabeledValue with NSString values
extern NSString * const ABPersonSocialProfilesProperty NS_AVAILABLE_IOS(8_0);           // "socialProfiles"             array of LabeledValue with SocialProfile values
extern NSString * const ABPersonPostalAddressesProperty NS_AVAILABLE_IOS(8_0);          // "postalAddresses"            array of LabeledValue with PostalAddress values

If you look at the header, that's postalAddresses

Upvotes: 4

Related Questions