Адресная книга возвращает старые значения - PullRequest
0 голосов
/ 12 ноября 2009

У меня проблема с платформой AddressBook. Кажется, все это происходит из-за того, что ABCopyRecordForUniqueId возвращает запись со старыми данными.

Пример:

Я запускаю программу ниже в одном окне терминала - она ​​показывает данные .

Я изменяю пользовательский интерфейс адресной книги - моя программа продолжает показывать старые данные.

Я запускаю другой экземпляр той же программы в новом окне терминала - в нем отображаются обновленные данные .

Я попытался опубликовать на сайте omnigroup безуспешно :( Так что любые рекомендации действительно приветствуются

PS: Если вы хотите попробовать код, чтобы получить идентификатор адресной книги, вы можете экспортировать контакт в виде vCard и открыть его в текстовом редакторе

int main (int argc, const char * argv[])
{   
ABAddressBookRef addressBook = ABGetSharedAddressBook();

while(1)
{
    ABRecordRef addressBookRecord = NULL;

    addressBookRecord = ABCopyRecordForUniqueId(addressBook, CFSTR("4064D587-0378-4DCF-A6B9-D3702F01C94C:ABPerson"));
    CFShow(addressBookRecord);

    CFRelease(addressBookRecord);

    sleep(1);
}

return 0;
}

Ответы [ 2 ]

0 голосов
/ 19 ноября 2009

спасибо за предложение. Я подал отчет, но оказалось, что ожидается

Раздражает, что это не было в документах ..

"Инжиниринг установил, что эта проблема ведет себя как задумано, на основании следующей информации:

Адресная книга требует запуска цикла выполнения для получения обновлений от других приложений. Вместо sleep (1) используйте CFRunLoopRunInMode (kCFRunLoopDefaultMode, 1.0, false). "

Спасибо, M

0 голосов
/ 13 ноября 2009

Я сам попробовал ваш пример и вижу ту же проблему. Из любопытства я попытался попросить общую адресную книгу внутри цикла (на случай, если с синглтоном адресной книги происходили какие-то странности), но это не имело значения. Я проверил документацию (ABAddressBook C Reference), а также справочник и руководство по структуре адресной книги более высокого уровня. Насколько я могу судить, ты поступаешь правильно.

Я бы подал это как ошибку против фреймворка.

...