4

I'd like to get a list of all ABContacts that have a phone number and only those contacts. Any contacts with just an email I do not want to show.

Android has a field called HAS_PHNONE_NUMBER you can query on but I'm not seeing anything like that for iPhone.

For example:

ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
//How do I filter people into an array of contacts that all have a phone number?
mymmaster
  • 826
  • 1
  • 9
  • 17

2 Answers2

8

You can use this code snippet

CFIndex numberOfPeople = CFArrayGetCount(_allPeople);
for (int i=0;i < numberOfPeople;++i) { 
    ABRecordRef ref = CFArrayGetValueAtIndex(_allPeople, i);
    ABMultiValueRef phones =(NSString*)ABRecordCopyValue(ref, kABPersonPhoneProperty);
    int phoneNumbersCount = ABMultiValueGetCount(phones);
    if (phoneNumbersCount>0)
    {
       // save this contact, it has phone number
    }
}
Alexander Voloshyn
  • 924
  • 2
  • 8
  • 21
2

There is no easy way or help like this in iOS, you have to parse your Array and if the people you are parsing have a phone number or a list of phones number not empty you add it to your final Array.

Ludovic Landry
  • 11,606
  • 10
  • 48
  • 80
  • Thanks. What about using NSPredicate? Would something like [NSPredicate predicateWithFormat:@"phonenumbers contains[cd] %@", number]; work? – mymmaster Mar 18 '11 at 17:41
  • ABAddressBook objects are not NSEntityDescription objects, so I don't think that you can perform request on them. – Ludovic Landry Mar 21 '11 at 08:29