我遇到了AddressBook框架的问题。 这一切似乎源于ABCopyRecordForUniqueId返回旧数据的记录。
示例:
我在一个终端窗口中运行下面的程序 - 它显示当前数据。
我通过地址簿界面进行了更改 - 我的程序继续显示旧数据。
我在新的终端窗口中运行了同一程序的另一个实例 - 它显示了更新的数据。
我试过在omnigroup网站上张贴没有运气:(所以任何指导都非常感激
PS:如果您想尝试代码,要获取地址簿ID,您可以将联系人导出为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;
}
答案 0 :(得分:0)
我自己尝试了你的例子并且看到了同样的问题。出于好奇,我尝试在循环中询问共享地址簿(如果地址簿单例中出现了一些奇怪的情况),但这没有任何区别。我查看了文档(ABAddressBook C Reference)以及更高级别的通讯录框架参考和指南。据我所知,你做的是正确的事。
我file this as a bug反对该框架。
答案 1 :(得分:0)
感谢您的建议。我确实提交了一份报告,但事实证明这是预期的
恼人的是,它不在文档中..
“Engineering已根据以下信息确定此问题的行为符合预期:
地址簿需要运行运行循环才能从其他应用程序接收更新。而不是睡眠(1),使用CFRunLoopRunInMode(kCFRunLoopDefaultMode,1.0,false)。“
谢谢, 中号