Obteniendo ABSource específico de ABAddressBook en iOS 4+

¿Alguien tiene un ejemplo de cómo obtener un ABSource específico de ABAddressBook en iOS 4+?

iOS 4+ proporciona una nueva API que permite seleccionar un ABSource específico de ABAddressBook. Esto puede ser útil ya que algunas operaciones, como la creación de un ABGroup, no son compatibles en algunas fonts (es decir, Exchange).

“No todos los tipos de fonts admiten grupos, más notoriamente, Exchange no sabe nada sobre grupos”. – http://flavors.me/volonbolon#1a5/tumblr

Se adjuntan funciones que aprovechan la API nueva para obtener fonts de tipos específicos que se pueden usar en llamadas a ABGroupCreateInSource ().

#define CFRELEASE_AND_NIL(x) CFRelease(x); x=nil; ABRecordRef sourceWithType (ABSourceType mySourceType) { ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef sources = ABAddressBookCopyArrayOfAllSources(addressBook); CFIndex sourceCount = CFArrayGetCount(sources); ABRecordRef resultSource = NULL; for (CFIndex i = 0 ; i < sourceCount; i++) { ABRecordRef currentSource = CFArrayGetValueAtIndex(sources, i); CFTypeRef sourceType = ABRecordCopyValue(currentSource, kABSourceTypeProperty); BOOL isMatch = mySourceType == [(NSNumber *)sourceType intValue]; CFRELEASE_AND_NIL(sourceType); if (isMatch) { resultSource = currentSource; break; } } CFRELEASE_AND_NIL(addressBook); CFRELEASE_AND_NIL(sources); return resultSource; } ABRecordRef localSource() { return sourceWithType(kABSourceTypeLocal); } ABRecordRef exchangeSource() { return sourceWithType(kABSourceTypeExchange); } ABRecordRef mobileMeSource() { return sourceWithType(kABSourceTypeMobileMe); } 

Realmente quiero saber cómo crear mi propia fuente. Al igual que el grupo de creación de Exchange con el que no necesita editar el registro fuente predeterminado, sino crear uno propio, y lo más fantástico es que la libreta de direcciones los vinculará automáticamente.

Xyzzycoder-

Su solución funciona bien si ya hay un localSource, pero simplemente devuelve NULL si no hay uno.

¿Hay alguna manera de, por ejemplo, crear un ABRecordRef para un localSource? Necesito poder almacenar mi contacto en una fuente no sincronizada.

Aclamaciones

El código tiene errores, por eso siempre devuelve dos, ya que el método: ABRecordGetRecordType no es parte de ABSource. Solo incluye:

kABPersonType para persona graba kABGroupType para registros de grupo. kABSourceType para registros de origen.

Para averiguar el tipo correcto, debe usar: ABRecordCopyValue (source, kABSourceTypeProperty) en su lugar. 🙂 Funciona excelente en mi iPhone con o sin localSource.

¡Buena suerte!

    Intereting Posts