是否可以使用ABPersonViewController从我的iOS应用程序更新链接的联系人?

时间:2012-12-19 18:26:52

标签: ios abaddressbook abpersonviewcontroller addressbookui carddav

我的应用允许用户从地址簿导入联系人并将其存储在我们的CardDAV服务器中。我想保持我们的CardDAV服务器上的联系人与地址簿中的所有其他链接的联系人(例如iCloud)保持同步。

使用地址簿的统一联系人视图编辑联系人时,将更新所有链接的联系人。我想让我的应用程序的用户在不离开应用程序的情况下也能这样做。 ABPersonViewController是否具有与本机iOS通讯簿相同的功能,以使用“统一视图”更新所有链接的联系人?

控制器有一个名为shouldShowLinkedPeople的属性,但我不确定它实际上是做什么的。

1 个答案:

答案 0 :(得分:1)

我实际上遇到了同样的问题但找不到答案。但后来我看到你提到了属性“shouldShowLinkedPeople”,这正是解决方案!您所要做的就是将属性设置为YES,您将能够在ABPersonViewController中查看和编辑所有链接的联系人。

这就是我所做的(我的应用程序利用了ABPeoplePickerNavigationController):

在我的ABPeoplePickerNavigationController的子类中,它符合ABPeoplePickerNavigationControllerDelegate:

#import <UIKit/UIKit.h>
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>

@interface ContactsViewController : ABPeoplePickerNavigationController <ABPeoplePickerNavigationControllerDelegate>

@end

实施该方法,通过点击ABPeoplePickerNavigationController中的联系人,您可以通过ABPersonViewController查看/编辑联系人:

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
    ABPersonViewController *contactDetailViewController = [[ABPersonViewController alloc] init];
    contactDetailViewController.shouldShowLinkedPeople = YES;
    contactDetailViewController.displayedPerson = person;
    contactDetailViewController.allowsEditing = YES;

    [self pushViewController:contactDetailViewController
                    animated:YES];

    return NO;
}

要编辑链接的联系人(例如Facebook,iCloud等),您必须包含以下行:

contactDetailViewController.shouldShowLinkedPeople = YES;

否则,您将只能编辑其中一个链接的联系人,这可能是不受欢迎的。