iPhone上ABPeoplePickerNavigationController的自定义地址簿

时间:2011-04-12 19:55:34

标签: iphone ios abaddressbook

我正在尝试通过向设备地址簿添加新记录来创建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上。

谢谢!

2 个答案:

答案 0 :(得分:2)

正如Toro所说,您需要先保存对数据库的任何更改。 ABPeoplePickerNavigationController无意使用uncommit数据或自定义数据。

您可以在Apple Dev论坛上看到相当新鲜的主题 https://devforums.apple.com/message/370070#370070 问类似问题的地方。来自Apple的人说“我看不到任何办法。”但他建议填写一个错误,以便在未来的iOS版本中实现此功能。

现在你所能做的就是从地面为这个AddressBook编写你自己的用户界面:(

更新:他 - 他。我也在App Dev Forum上找到了你的问题)))

答案 1 :(得分:0)

您需要通过 ABAddressBookSave()方法保存对数据库的任何更改。

apple doc link