2010-12-07 4 views
20

Je dois sélectionner la source du carnet d'adresses dans laquelle les contacts sont créés par mon application.Carnet d'adresses iPhone: Liste des sources et des comptes

Dans l'application Contacts, lorsque je sélectionne "< Groupes", je reçois les choix

  • Tous les contacts
  • MobileMe
    • Tous MobileMe
    • Société
    • Famille
    • Amis
    • ...
  • ACME échange
    • ACME échange liste d'adresses globale
  • test CardDAV
    • Carnet d'adresses
    • Recherche

Utilisation de la fonction ABAddressBookCopyArrayOfAllSources je reçois des documents sources pour

  • Aucun nom; type: kABSourceTypeMobileMe
  • Aucun nom; type: kABSourceTypeExchangeGAL
  • "Addressbook"; type: kABSourceTypeCardDAV
  • "Rechercher"; tapez: kABSourceTypeCardDAVSearch

Les noms ne sont en aucun cas descriptifs et je souhaite afficher les noms des comptes en plus du nom ou du type de la source, tout comme l'application Contact.

Savez-vous un moyen de trouver le nom de compte d'une source, ou de récupérer tous les noms de compte existants et les sources de chaque compte? D'autres idées pour obtenir des entrées plus descriptives?

+0

Avez-vous découvert, comment lister les noms de compte? c'est-à-dire dans votre exemple: ACME Exchange ou Test CardDAV –

Répondre

0

Cela peut aider:

Obtaining Specific ABSource from ABAddressBook in iOS 4+

iOS 4+ fournit une nouvelle API qui permet de sélectionner un ABSource spécifique du ABAddressBook. Cela peut être utile dans certaines opérations, par ex. La création d'un ABGroup n'est pas prise en charge dans certaines sources (Exchange). "Tous les types de sources ne prennent pas en charge les groupes, plus visible, Exchange ne connaît rien aux groupes."- http://flavors.me/volonbolon#1a5/tumblr

Il montre comment les fonctions peuvent être utilisées que levier de la nouvelle API pour obtenir des sources de types spécifiques qui peuvent être utilisés dans les appels à ABGroupCreateInSource(), qui semble être ce que vous êtes après

4

Au. iOS 5.1 il n'y a pas d'API publique pour cette

on peut espérer que ABRecordCopyCompositeName() serait obtenir ce que vous êtes après -. il fournit le nom « convivial humain » pour les dossiers et personne groupe -. mais hélas il renvoie la valeur null

Comme Graham a souligné (en offrant une prime) directement un sking pour kABSourceNameProperty fournit la mauvaise réponse.

ABAddressBookRef addressBook = ABAddressBookCreate(); 
CFArrayRef sources = ABAddressBookCopyArrayOfAllSources(addressBook); 

CFIndex i, c = CFArrayGetCount(sources); 
ABRecordRef curSource; 

// Log each source name. 
for (i=0; i<c; i++) { 
    curSource = CFArrayGetValueAtIndex(sources, i); 
    NSString *name = (__bridge_transfer NSString *)ABRecordCopyCompositeName(curSource); 
    NSLog(@"Alas this is null: %@", name); 


    NSString *directValue = (__bridge_transfer NSString *)ABRecordCopyValue(curSource,kABSourceNameProperty); 
    NSLog(@"And direct access gives wrong answer: %@", directValue); 

} 

CFRelease(sources); 
CFRelease(addressBook); 

Tout ce que je peux suggérer, est le dépôt d'un radar pour demander que ABRecordCopyCompositeName() être fait pour faire ce que le service lui-même est d'utiliser les contacts disponibles pour le reste d'entre nous.

+0

Merci pour cela, malheureusement la documentation 'ABRecordCopyCompositeName()' inclut "Le comportement de cette fonction n'est pas défini pour les enregistrements source." donc je ne m'attendais pas à ce que ça marche :-( –

+0

Oui, ça va être la raison pour laquelle ça ne marche pas alors :-) –

Questions connexes