2009-11-12 75 views
0

我遇到了AddressBook框架的问题。 这一切似乎都是ABCopyRecordForUniqueId返回一个包含旧数据的记录。通讯簿返回旧值

实施例:

我跑起来下面在一个终端窗口程序 - 它示出了当前数据

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

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

我已经试过张贴在omnigroup现场没有运气:(所以任何指导,非常感谢

PS:如果你想尝试的代码,以获得一个地址簿ID可以导出联系人作为一个电子名片,并用文本编辑器

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

我想你的例子打开自己,我看到了同样的问题。出于好奇,我想询问循环内的共享地址簿(如果有一些古怪继续使用地址簿singleton),但这没有什么区别,我也检查了文档(ABAddressBook C Reference)作为更高级的地址簿框架参考和指南。据我所知,你做的是正确的事情。

我是file this as a bug针对框架。

0

感谢您的建议。我没有提交报告,但事实证明这是预期

恼人的,这是不是在文档..

“工程已经确定,根据下面的信息,预期这个问题表现:

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

谢谢, M