I was actually having the same exact issue and couldn't find the answer. But then I saw that you mentioned the property "shouldShowLinkedPeople" and that is exactly the solution! All you have to do is set the property to YES and you will be able to view and edit all linked contacts in your ABPersonViewController.
Here's what I did (my app takes advantage of ABPeoplePickerNavigationController):
In my subclass of ABPeoplePickerNavigationController which conforms to the ABPeoplePickerNavigationControllerDelegate:
#import <UIKit/UIKit.h>
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
@interface ContactsViewController : ABPeoplePickerNavigationController <ABPeoplePickerNavigationControllerDelegate>
@end
Implement the method, which allows you to view/edit a contact via ABPersonViewController by clicking on a contact in 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;
}
To edit a contact that is linked (for example to Facebook, iCloud, etc), you must include the line:
contactDetailViewController.shouldShowLinkedPeople = YES;
Otherwise you'll only be able to edit one of the linked contacts, which can be undesired.