2010-10-20 2 views
1

En utilisant le 'AddressBook.framework', il est possible de filtrer toutes les entreprises (c'est-à-dire uniquement les personnes). Par exemple, comment pourrait-on modifier le code ci-dessous pour enlever les entreprises:Filtrer les entreprises à partir des références du carnet d'adresses

ABAddressBookRef addressbook = ABAddressBookCreate(); 
CFArrayRef contacts = ABAddressBookCopyArrayOfAllPeople(addressbook); 

Je trouve que les entreprises ne semblent pas être stockés sous forme de groupes (ils sont toujours revenus avec l'appel ci-dessus). Merci!

Répondre

4

Vous avez raison, les entreprises sont des enregistrements/personnes dans le carnet d'adresses.

Recherchez la valeur du kABPersonFlags - l'un des indicateurs est "Afficher en tant que société". Alors faites juste un bitmask et comparez.

if (([aPerson valueForProperty:kABPersonFlags] & kABShowAsMask) == kABShowAsCompany) { 
    // it's a company 
} else { 
    // it's a person, resource, or room 
} 

J'utilise les références suivantes d'Apple, que vous devriez probablement aussi bien:


EDIT: Désolé, l'est ci-dessus pour Carnet d'adresses sur Mac OS X. Essayez ceci pour iOS:

ABRecordRef aRecord = ... // Assume this exists 
CFNumberRef recordType = ABRecordCopyValue(aRecord, kABPersonKindProperty); 
if (recordType == kABPersonKindOrganization) { 
    // it's a company 
} else { 
    // it's a person, resource, or room 
} 

L'idée est la même: obtenir la valeur de la propriété type de personne, et voir ce qu'il vous dit.

utilisé ces docs Apple:

+0

Impressionnant! Merci Alex c'est exactement ce que je cherche! –

Questions connexes