Я создаю приложение, в котором я использовал для обновления контактов из базы данных sqlite при некоторых действиях перезаписи. Я использовал для получения контактов из адресной книги iPhone по разрешению пользователя каждый раз, когда пользователь входил в систему, и вставлял его в базу данных в основном потоке.
Я не хочу вставлять контакты iphone каждый раз в базу данных при входе пользователя в систему, поскольку оно превышает время входа в систему, и это также не лучший подход, если адресная книга iPhone не изменяется, поэтому вставка базы данных происходит при каждом входе в систему.
Вот как я получаю контакты
NSArray *thePeople = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(_addressBook);
NSMutableArray * _allPeoplesDictArr = [NSMutableArray array];
for (id person in thePeople)
{
ABMultiValueRef phones =(__bridge ABMultiValueRef)((__bridge NSString*)ABRecordCopyValue((__bridge ABRecordRef)(person), kABPersonPhoneProperty));
NSString* name = (__bridge NSString *)ABRecordCopyCompositeName((__bridge ABRecordRef)(person));
ABRecordRef record = (__bridge ABRecordRef)[thePeople objectAtIndex:loop];
if(ABRecordGetRecordType(record) == kABPersonType) // this check execute if it is person group
{
ABRecordID recordId = ABRecordGetRecordID(record); // get record id from address book record
recordIdString = [NSString stringWithFormat:@"%d",recordId]; // get record id string from record id
NSDate *modificationDate = (__bridge NSDate*) ABRecordCopyValue(record, kABPersonModificationDateProperty);
NSLog(@"modificationDate %@",modificationDate);
firstNameString = (__bridge NSString*)ABRecordCopyValue(record,kABPersonFirstNameProperty); // fetch contact first name from address book
lastNameString = (__bridge NSString*)ABRecordCopyValue(record,kABPersonLastNameProperty); // fetch contact last
NSLog(@"%@",firstNameString);
}
}
Я получаю даты модификации и могу управлять ими в массиве, но как я узнаю, что массив изменился, когда я вышел из системы или завершил работу приложения.
Существует еще один подход: я могу сопоставить каждую дату изменения контактов с моей датой вставки или создания, присутствующей в моей базе данных sqlite, но все же сравнение займет время.
Так что нет никакого способа проверить MD5CheckSum или Addressbook в целом, а сравнивать каждую дату создания контактов и дату вставки. И если Addressbook MD5CheckSum изменен, поэтому вставка или обновление должны произойти, иначе не делайте этого.