2011-04-12 76 views
1

我想通过向设备地址簿添加新记录(基本上是将私人联系人列表与设备AB合并)来在iPhone上创建定制地址簿。那么我想,让用户选择一个联系人,我以为我可以用ABPeoplePickerNavigationController.addressbook物业办:在iPhone上为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()后,我可以验证循环添加一切)。但是,条目不会被picker显示(除非我保存联系人,这当然会将所有更改保存到设备地址簿中)。

有没有办法做到这一点?这是在iOS 4.3.1上。

谢谢!

回答

2

正如Toro所说,您需要先保存对数据库的任何更改。 ABPeoplePickerNavigationController不打算使用取消提交数据或自定义数据。

你可以在Apple Dev论坛上看到相当新鲜的话题 https://devforums.apple.com/message/370070#370070 问题类似的地方被问到。苹果公司的人说:“我看不出有什么办法可以做到这一点。”但他建议填补一个错误,以便在将来的iOS版本中实现此功能。

所有你现在能做的就是代码自己从地面:(

更新此地址簿UI:他,他,我发现你的应用开发论坛的问题太)))

+0

感谢您的回答。我几乎认为是这种情况,但希望有其他事情。呃,好吧。谢谢.. – 2011-04-13 21:26:07

0

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

The apple doc link

+0

呀,我知道它适用于ABAddressBookSave(),但希望不使用它。不过,感谢您的帮助。 – 2011-04-13 21:26:38

+0

如果您想以非浮动方式显示这些联系人,则需要改用ABRecordRef。您可以浏览那些ABRecordRef中的信息。但是,直到ABAddressBookSave()到db,那些ABRecordRef没有有效的记录ID。因为他们没有保存到数据库。 – AechoLiu 2011-04-14 02:03:39