Синхронизация записей в адресной книге

#ios #ios4 #abaddressbook

#iOS #ios4 #abaddressbook

Вопрос:

У меня есть приложение для iPad, которое синхронизирует контакт с контактами на стороне сервера.

Как мне определить только те записи ABAddressBook, которые изменились? Возможно, что происходят изменения на стороне сервера, в моем приложении или извне на ipad.

Когда я использую

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

Я получаю обратный вызов внешних изменений, но без какой-либо информации о том, что изменилось. Как мне получить эту информацию?

Когда я использую NSString * const kABModificationDateProperty , я не знаю, с чем сравнивать.

Ответ №1:

Я не знаю, есть ли у вас решение для этого. Если нет, возможно, это поможет вам:

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

Комментарии:

1. Спасибо за это. Не уверен, что это имеет большое значение, но я бы, вероятно, сделал это вместо: NSDate *lastModiDate = (NSDate*) [person valueForProperty:kABModificationDateProperty];

Ответ №2:

Вам нужно будет фактически сравнить все поля между сервером и локальной книгой для каждого пользователя, которого вы хотите синхронизировать.