让我先解释一下我想做什么。在本机 Iphone 中的“最近”选项卡中,如果您单击任何通讯录中未找到的联系人,您可以选择“添加到现有联系人”
单击“添加到现有联系人”后,会出现一个选择器,您可以进行选择。之后它会ABPersonViewController
自动将您带到一个并允许您编辑或保存新联系人:
我正在尝试重新创建它,但遇到了一些问题。在我的版本中,在我创建 UnknownPersonViewController 并且最终用户按下“添加到现有联系人”之后,会出现一个选择器,并允许从类似于原生 Iphone 的地址簿中进行选择。但是在做出选择之后,姓名会自动添加到地址簿中,并且不会出现 personViewController 让用户选择是否添加联系人。即使我可以让它在选择后不自动写入地址簿,我也可以让它立即在编辑模式下显示一个 personviewcontroller。
所以我的问题是为什么它会在选择后自动更新地址簿?我将 ABUnknownpersonviewcontroller 推到 UITableviewController 导航控制器上。并在带有 iOS 6.01 的物理设备上进行测试这是一些代码:
ABRecordRef person = ABPersonCreate ();
ABMutableMultiValueRef multiValue = ABMultiValueCreateMutable(kABStringPropertyType);
ABMultiValueAddValueAndLabel(multiValue, call.number, kABPersonPhoneMainLabel,
NULL);
ABRecordSetValue(person, kABPersonPhoneProperty, multiValue, error);
if(multiValue) CFRelease(multiValue);
ABUnknownPersonViewController *unknownCtrl = [[ABUnknownPersonViewController alloc] init];
unknownCtrl.displayedPerson = person; //this has a phone number with "main" label
unknownCtrl.allowsActions = YES;
unknownCtrl.allowsAddingToAddressBook = YES;
unknownCtrl.editing=NO;
unknownCtrl.unknownPersonViewDelegate = self;
// unknownCtrl.addressBook=ABAddressBookCreate(); // I tried setting addressbook to nil and object
unknownCtrl.addressBook=nil;
[self setTitle:call.type forUIViewController:unknownCtrl];
[self.navigationController pushViewController:unknownCtrl animated:YES];
注意:我对这篇文章有类似的问题:http ://forums.macrumors.com/archive/index.php/t-1023140.html
也许https://discussions.apple.com/thread/1682620?start=0&tstart=0
更新:似乎如果我把 kABPersonPhoneMainLabel 从那个人那里,然后它不会将电话号码写给联系人。之后我所做的是在 didResolveToPerson 委托中,我在编辑模式下调用了 personviewcontroller。这模拟了本机行为。这可能会回答我自己的问题,谢谢大家。