我正在尝试通过向设备地址簿添加新记录来创建iPhone上的自定义地址簿(基本上,将私人联系人列表与设备AB合并)。然后,我想让用户选择一个联系人,我认为我可以使用.addressbook
的{{1}}属性:
ABPeoplePickerNavigationController
条目已成功添加到地址簿中(我可以验证是否在循环后执行ABAddressBookRef contacts = ABAddressBookCreate();
for (PrivateUserType *user in rosterItems)
{
CFErrorRef err = NULL;
ABRecordRef ref = ABPersonCreate();
ABRecordSetValue(ref, kABPersonLastNameProperty, (CFStringRef)user.lastName, &err);
if (err != NULL)
{
NSString *errorStr = [(NSString *)CFErrorCopyDescription(err) autorelease];
NSLog(@"Can not set name: %@", errorStr);
}
...
ABAddressBookAddRecord(contacts, ref, &err);
if (err != NULL)
{
NSString *errorStr = [(NSString *)CFErrorCopyDescription(err) autorelease];
NSLog(@"Error adding XMPP roster user to addressbook: %@", errorStr);
}
}
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.addressBook = contacts;
[viewController presentModalViewController:picker animated:YES];
[picker release];
以添加所有内容)。但是,ABAddressBookSave()
不会显示这些条目(除非我保存联系人,当然这会将所有更改保存到设备地址簿中)。
有办法做到这一点吗?这是在iOS 4.3.1上。
谢谢!
答案 0 :(得分:2)
正如Toro所说,您需要先保存对数据库的任何更改。 ABPeoplePickerNavigationController无意使用uncommit数据或自定义数据。
您可以在Apple Dev论坛上看到相当新鲜的主题 https://devforums.apple.com/message/370070#370070 问类似问题的地方。来自Apple的人说“我看不到任何办法。”但他建议填写一个错误,以便在未来的iOS版本中实现此功能。
现在你所能做的就是从地面为这个AddressBook编写你自己的用户界面:(
更新:他 - 他。我也在App Dev Forum上找到了你的问题)))
答案 1 :(得分:0)
您需要通过 ABAddressBookSave()方法保存对数据库的任何更改。