LoginSignup
2
1

More than 5 years have passed since last update.

iOS9でABNewPersonViewControllerが動かないぞっと

Posted at

ドキュメントを追えきれてない自分が行けないので、これから書くことは俺もめんどくさがり屋だぜ、という人以外は関係ありません。

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のバグは解決したのは言うまでもありません。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1