iOS8における電話帳アクセスについて
Posted: 2015年1月04日(日) 23:46
iOS8にて電話帳にアクセスしようと思い、
以下のpdfの10ページまでを実装しようとしました。
https://developer.apple.com/jp/devcente ... iPhone.pdf
しかし、上記pdfはiOS8向けではないため、
以下のページを参考にiOS8向けの実装を行いました。
http://qiita.com/hongmhoon/items/566fee4d8f4c47e73385
ここで質問なのですが、iOS7までは
peoplePickerNavigationController:shouldContinueAfterSelectingPersonの戻り値をYESとすれば電話帳内で個人の情報が記載されているページに遷移できていたんですが、
iOS8になってpredicateForSelectionOfPersonで制御するようになったと上記ページに記載があります。
そのため、以下のように実装したのですが、
電話帳内で個人の情報が記載されているページには遷移できませんでした。
恐らく47行目がオカシイからだと思うのですが、
どうすれば良いのでしょうか?
お手数ですがご教示お願い致します。
以下のpdfの10ページまでを実装しようとしました。
https://developer.apple.com/jp/devcente ... iPhone.pdf
しかし、上記pdfはiOS8向けではないため、
以下のページを参考にiOS8向けの実装を行いました。
http://qiita.com/hongmhoon/items/566fee4d8f4c47e73385
ここで質問なのですが、iOS7までは
peoplePickerNavigationController:shouldContinueAfterSelectingPersonの戻り値をYESとすれば電話帳内で個人の情報が記載されているページに遷移できていたんですが、
iOS8になってpredicateForSelectionOfPersonで制御するようになったと上記ページに記載があります。
そのため、以下のように実装したのですが、
電話帳内で個人の情報が記載されているページには遷移できませんでした。
恐らく47行目がオカシイからだと思うのですが、
どうすれば良いのでしょうか?
お手数ですがご教示お願い致します。
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)showPicker:(id)sender
{
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
// [self presentModalViewController:picker animated:YES];
[self presentViewController:picker animated:YES completion:nil];
}
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker
{
// [self dismissModalViewControllerAnimated:YES];
[self dismissViewControllerAnimated:YES completion:nil];
}
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person
{
[self peoplePickerNavigationController:peoplePicker shouldContinueAfterSelectingPerson:person];
}
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
[self displayPerson:person];
// [self dismissModalViewControllerAnimated:YES];
[self dismissViewControllerAnimated:YES completion:nil];
peoplePicker.predicateForSelectionOfPerson = [NSPredicate predicateWithFormat:@"%K.@count <= 1", ABPersonPhoneNumbersProperty];
return NO;
}
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker
didSelectPerson:(ABRecordRef)person
property:(ABPropertyID)property
identifier:(ABMultiValueIdentifier)identifier
{
[self peoplePickerNavigationController:peoplePicker shouldContinueAfterSelectingPerson:person property:property identifier:identifier];
}
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person
property:(ABPropertyID)property
identifier:(ABMultiValueIdentifier)identifier
{
return NO;
}
- (void)displayPerson:(ABRecordRef)person
{
NSString* name = (__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty);
self.firstName.text = name;
NSString* phone = nil;
ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
if (ABMultiValueGetCount(phoneNumbers) > 0)
{
phone = (__bridge_transfer NSString*)
ABMultiValueCopyValueAtIndex(phoneNumbers, 0);
}
else
{
phone = @"[None]";
}
self.phoneNumber.text = phone;
CFRelease(phoneNumbers);
}
@end