最初にやりたいことを説明させてください。ネイティブの 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 を呼び出します。これにより、ネイティブの動作がシミュレートされます。これは私自身の質問に答えるかもしれません、ありがとう。