2011-04-14 8 views
10

Tengo una aplicación de iPad que sincroniza el contacto con los contactos en el lado del servidor.Sincronización ABAddressbook-Entries

¿Cómo puedo detectar solo ABAdressbook-Entradas que han cambiado? Es posible que ocurran cambios en el lado del servidor, en mi aplicación o externamente en el ipad.

Cuando uso

void ABAddressBookRegisterExternalChangeCallback (
    ABAddressBookRef addressBook, 
    ABExternalChangeCallback callback, 
    void *context 
); 

puedo obtener la devolución de llamada de los cambios externos, pero sin ningún tipo de información acerca de lo que ha cambiado. ¿Cómo obtengo esa información?

Cuando uso el NSString * const kABModificationDateProperty no sé con qué comparar.

Respuesta

4

No lo sé, si tiene una solución para eso. Si no es así, probablemente esto le ayudará a:

NSArray *allPeople = (NSArray *)ABAddressBookCopyArrayOfAllPeople(yourAddressBook); 

for (int i = 0; i < allPeople.count; i++) { 
    ABRecordRef *person = (ABAddressBookRef *)[allPeople abjectAtIndex:i]; 

    NSDate *lastModiDate = (NSDate*)ABRecordCopyValue(person, kABPersonModificationDateProperty); 
    NSLog(@"Last modification date: %@ of entry: %@", lastModiDate, person); 
} 
+0

Gracias por esto. No estoy seguro de que haga una gran diferencia, pero probablemente haga esto en su lugar: 'NSDate * lastModiDate = (NSDate *) [person valueForProperty: kABModificationDateProperty];' –

+0

¡Sr. T para presidente! – theDuncs

1

Tendrá que comparar en realidad todos los campos entre el servidor y el libro local para cada persona que desea sincronizar.