Дата изменения адресной книги в Xcode

Я создаю приложение, в котором я использовал для обновления контактов из базы данных 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 изменен, поэтому вставка или обновление должны произойти, иначе не делайте этого.


person user366584    schedule 06.02.2014    source источник


Ответы (1)


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

Обязательно откройте запрос функции на https://bugreport.apple.com, сообщив им, какой API вам нужен. . Опубликуйте номер сообщения об ошибке в вопросе, чтобы люди могли дублировать радар.

Из комментариев к другому ответу, вот радар для дублирования: rdar: // 16154022 (спасибо oski555)

person Leo Natan    schedule 24.02.2014