2

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

使用通讯簿的统一联系人视图编辑联系人时,所有链接的联系人都会更新。我想让我的应用程序的用户在不离开应用程序的情况下做同样的事情。ABPersonViewController 是否具有与原生 iOS 通讯录相同的功能,可以使用“统一视图”更新所有链接的联系人?

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

4

1 回答 1

1

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

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

在我符合 ABPeoplePickerNavigationControllerDelegate 的 ABPeoplePickerNavigationController 子类中:

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

@interface ContactsViewController : ABPeoplePickerNavigationController <ABPeoplePickerNavigationControllerDelegate>

@end

实现该方法,该方法允许您通过 ABPersonViewController 通过单击 ABPeoplePickerNavigationController 中的联系人来查看/编辑联系人:

- (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;

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

于 2013-03-24T05:01:32.653 回答