0

我遇到了 AddressBook 框架的问题。这一切似乎都源于 ABCopyRecordForUniqueId 返回带有旧数据的记录。

例子:

我在一个终端窗口中运行下面的程序 - 它显示当前数据。

我通过地址簿 UI 进行了更改 - 我的程序继续显示数据。

我在一个新的终端窗口中运行了同一程序的另一个实例——它显示了更新的数据。

我试过在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;
}
4

2 回答 2

0

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

我会将其作为针对框架的错误提交。

于 2009-11-13T15:03:12.257 回答
0

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

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

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

地址簿需要运行运行循环才能接收来自其他应用程序的更新。代替 sleep(1),使用 CFRunLoopRunInMode(kCFRunLoopDefaultMode, 1.0, false)。”

谢谢,米

于 2009-11-19T18:59:37.147 回答