地址簿返回旧值

时间:2009-11-12 20:46:58

标签: cocoa addressbook

我遇到了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;
}

2 个答案:

答案 0 :(得分:0)

我自己尝试了你的例子并且看到了同样的问题。出于好奇,我尝试在循环中询问共享地址簿(如果地址簿单例中出现了一些奇怪的情况),但这没有任何区别。我查看了文档(ABAddressBook C Reference)以及更高级别的通讯录框架参考和指南。据我所知,你做的是正确的事。

file this as a bug反对该框架。

答案 1 :(得分:0)

感谢您的建议。我确实提交了一份报告,但事实证明这是预期的

恼人的是,它不在文档中..

“Engineering已根据以下信息确定此问题的行为符合预期:

地址簿需要运行运行循环才能从其他应用程序接收更新。而不是睡眠(1),使用CFRunLoopRunInMode(kCFRunLoopDefaultMode,1.0,false)。“

谢谢, 中号