2010-12-07 12 views
20

Necesito seleccionar la fuente de la libreta de direcciones en la que mi aplicación crea los contactos.Libreta de direcciones del iPhone: Orígenes y cuentas de la lista

En la aplicación Contactos, cuando selecciono "< Grupos", consigo las opciones

  • Todos los contactos
  • MobileMe
    • Todo MobileMe
    • Compañía
    • Familia
    • Amigos
    • ...
  • ACME Exchange
    • ACME Cambio de lista global de direcciones
  • prueba CardDAV
    • agenda telefónica
    • Buscar

Uso de la función ABAddressBookCopyArrayOfAllSources consigo registros fuente de

  • Sin nombre; tipo: kABSourceTypeMobileMe
  • Sin nombre; tipo: kABSourceTypeExchangeGAL
  • "Libreta de direcciones"; tipo: kABSourceTypeCardDAV
  • "Buscar"; tipo: kABSourceTypeCardDAVSearch

Los nombres no son de ninguna manera descriptivos y me gustaría mostrar los nombres de las cuentas además del nombre o tipo de fuente, tal como lo hace la aplicación de contacto.

¿Conoce una forma de averiguar el nombre de la cuenta de una fuente, o para recuperar todos los nombres de cuenta existentes y las fuentes de cada cuenta? ¿Alguna otra idea para obtener entradas más descriptivas?

+0

¿Lo descubrió, cómo enumerar los nombres de cuenta? es decir, en su ejemplo: tarjeta de intercambio o prueba ACMEDAV –

Respuesta

0

Esto puede ayudar:

Obtaining Specific ABSource from ABAddressBook in iOS 4+

iOS 4 proporciona una nueva API que permite seleccionar un determinado ABSource del ABAddressBook. Esto puede ser útil como algunas operaciones, p. crear un ABGroup, no son compatibles en algunas fuentes (es decir, Exchange).

"No todos los tipos de fuentes admiten grupos, más notablemente, Exchange no sabe nada sobre grupos."- http://flavors.me/volonbolon#1a5/tumblr

Se muestra cómo se pueden utilizar las funciones que aprovechan la nueva API para obtener fuentes de tipos específicos que pueden ser utilizados en las llamadas a ABGroupCreateInSource(), que parece ser lo que está buscando

4

En fecha. iOS 5.1 no existe una API pública para este

Uno esperaría que ABRecordCopyCompositeName() obtendría lo que está buscando -. proporciona el nombre de "humano amigable" para los registros individuales y colectivas -. pero por desgracia devuelve null

Como señaló Graham (al ofrecer una recompensa) directamente a sking for kABSourceNameProperty proporciona la respuesta incorrecta.

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); 

Todo lo que puedo sugerir es la presentación de un radar para pedir que ABRecordCopyCompositeName() pueden hacer para que haga cualquier contacto servicio en sí es el uso disponible para el resto de nosotros.

+0

Gracias por eso, desafortunadamente la documentación de 'ABRecordCopyCompositeName()' incluye "El comportamiento de esta función no está definido para los registros fuente". así que no esperaba que funcionara :-( –

+0

Sí. Por eso no funciona entonces :-) –

Cuestiones relacionadas