ドキュメントを追えきれてない自分が行けないので、これから書くことは俺もめんどくさがり屋だぜ、という人以外は関係ありません。
iOS9での症状
アドレス帳に追加するために表示したABNewPersonViewControllerが何故か閉じない
まあ、バグだなと思ってデバッグするときは、大概自分のコードがどこかおかしいと思いますよね(結論:先にドキュメント見ろ!)。
で、いつものとおり自分のコードを疑い始めたわけです(結論:自分のコードが悪かった)。アドレス帳が閉じないのでまっさきに見たのはdelegateの
- (void)newPersonViewController:(ABNewPersonViewController *)newPersonView
didCompleteWithNewPerson:(ABRecordRef)person
の中で、閉じるところ
[self dismissViewControllerAnimated:YES completion:nil];
を確認したり、ダイアログを表示するところ、
ABRecordRef newPerson = ABPersonCreate();
〜略〜
ABNewPersonViewController *newPersonViewController = [[ABNewPersonViewController alloc] init];
newPersonViewController.newPersonViewDelegate = self;
newPersonViewController.displayedPerson = newPerson;
CFRelease(newPerson);
UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:newPersonViewController];
[self presentViewController:navigation animated:YES completion:nil];
はこうしてた。うーむ、普通だ。
なんてことはない、iOS9では、AddressBook.frameworkではなく、Contacts.frameworkやContactsUI.frameworkを使うのだそうだ。
Appleのリリースノートは見たけど、その時はいつかはなくなるけどバイナリとしてはまあ動くのかなあくらいにしか思ってなかった。まさか、使わないほうが良いとは思わなかった。
今までもだいたい動いていたしね。
今後はそんな考えはやめて、ちゃんとコードはメンテナンスしておこうと誓いました。
同じような人が出ないためにもiOS9の場合は、ごっそり、
CNContactStore *store = [[CNContactStore alloc] init];
CNMutableContact *contact = [[CNMutableContact alloc] init];
CNLabeledValue *homePhone = [CNLabeledValue labeledValueWithLabel:CNLabelHome value:[CNPhoneNumber phoneNumberWithStringValue:phoneNumber ]];
contact.phoneNumbers = @[homePhone];
CNContactViewController *contactViewController = [CNContactViewController viewControllerForNewContact:contact];
contactViewController.contactStore = store;
contactViewController.delegate = self;
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:contactViewController];
navigationController.modalPresentationStyle = UIModalPresentationPageSheet;
[self presentViewController: navigationController animated:YES completion: nil];
としてください。もちろんdelegateでdismissするのをお忘れなく。
冒頭に書いたUIのバグは解決したのは言うまでもありません。