ios - 我怎样才能得到联系ID

标签 ios ios8 ios8.1 addressbookui

我在从地址簿中获取联系人 ID 时遇到问题。

我的 .m 文件:

-(IBAction)test:(id)sender
{
    ABPeoplePickerNavigationController* picker = [[ABPeoplePickerNavigationController alloc] init];
    picker.peoplePickerDelegate = self;
    [self presentViewController:picker animated:YES completion:nil];
}

-(void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person
{
    [peoplePicker dismissViewControllerAnimated:YES completion:nil];
    ABRecordID recordID = ABRecordGetRecordID(person);
    label.text = [NSString stringWithFormat:@"%d", recordID];

}

-(void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker
{
    [peoplePicker dismissViewControllerAnimated:YES completion:nil];
}

我将 AddressBook 和 AddressBookUI 导入到 .h 文件中。 一切正常,但我得到了错误的 ID。 每次我只得到 ID -1,这代表错误。

希望你能帮助我。

非常感谢, 基督徒

最佳答案

在 iOS 8 中,当仅显示联系人选择器时,它不再自动请求地址簿权限。 (这个想法是,选择器本身并没有真正让应用程序访问您的联系人,因此不需要任何许可。当应用程序没有真正获取联系人详细信息时,它提供低摩擦 UI。)

但是,在您的情况下,您实际上是在尝试以编程方式检索有关联系人的信息。为此,您确实需要许可。因此,在显示选择器之前,您可能需要请求访问地址簿的权限:

ABAuthorizationStatus status = ABAddressBookGetAuthorizationStatus();
if ((status == kABAuthorizationStatusDenied || status == kABAuthorizationStatusRestricted)) {
    NSLog(@"User previously denied permission; show error message that they must go to settings and give this app permission");
    return;
} else if (status == kABAuthorizationStatusNotDetermined) {
    CFErrorRef error;
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
    if (!addressBook) {
        NSLog(@"unable to open address book: %@", CFBridgingRelease(error));
        return;
    }

    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
        if (granted) {
            NSLog(@"OK");
        } else {
            NSLog(@"Not ok");
        }

        CFRelease(addressBook);
    });
}

关于ios - 我怎样才能得到联系ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28750625/

相关文章:

ios - 今天查看扩展(小部件)不工作

ios - 在 ios8 中没有获取纬度和经度值

uitableview - Xcode 6.1.1、iOS 8.1 SDK 上的 Storyboard 中静态或原型(prototype) UITableViewCell subview 的大小调整不正确

swift - 将从 ManagedObjectContext 过滤的对象转换为 NSArray

ios - 暂停 CFTimeInterval 计时器?

iphone - 在后台运行应用程序

ios - 如何使用 xib 文件在 Swift 中以编程方式创建幻灯片导航菜单?

ios - 如何将数据从 UITableViewCell 传递到 ViewController?

ios - popToRootViewControllerAnimated 使我的应用程序崩溃

ios - iOS Crashlog未知进程未知类型