如何从联系人中获取所选人员的电话号码

6
我需要从联系人中获取电话号码。
我的代码如下:
- (IBAction)contacts {

    NSLog(@"contacts clicked ");

    ABPeoplePickerNavigationController *peoplePickerController = [[ABPeoplePickerNavigationController alloc] init];
    peoplePickerController.peoplePickerDelegate = self;
    [self presentModalViewController:peoplePickerController animated:NO];
    [peoplePickerController release];

}
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person {
    NSString *number = (NSString *)ABRecordCopyValue(person, kABPersonPhoneProperty);

    NSLog(@" %@",number);
    return YES;
}

这里在控制台中显示的是这样的。
ABMultiValueRef 0x740b680 with 1 value(s)
    0: _$!<Mobile>!$_ (0x7419880) - (929) 230-8622 (0x740b490)

这里的(929) 230-8622是一个手机号码,我应该怎样获取它。

在选择联系人之后,我需要关闭这个视图控制器。

为此,我编写了以下代码:

[self dismissModalViewControllerAnimated:YES];

但是它显示了一个警告,说我的类可能无法响应dissmissModalViewController。

我应该如何做到在选择后关闭这个视图控制器呢?

请问有谁能帮帮我吗?

提前感谢。

2个回答

4
我通过添加以下代码解决了我的问题。
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person
                                property:(ABPropertyID)property
                              identifier:(ABMultiValueIdentifier)identifier {
    if (property == kABPersonPhoneProperty) {
        ABMultiValueRef emails = ABRecordCopyValue(person, property);
        CFStringRef phonenumberselected = ABMultiValueCopyValueAtIndex(emails, identifier);
        CFStringRef emailLabelSelected = ABMultiValueCopyLabelAtIndex(emails, identifier);
        CFStringRef emailLabelSelectedLocalized = ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(emails, identifier));
        NSLog(@"\n EmailValueSelected = %@ \n EmailLabelSelected = %@ \n \EmailLabeSelectedlLocalized = %@", phonenumberselected, emailLabelSelected, emailLabelSelectedLocalized);

        NSString *aNSString = (NSString *)phonenumberselected;



        [ self dismissModalViewControllerAnimated:YES ];
        return NO;
    }   
    return YES;
}

希望这对像我一样遇到问题的人有所帮助。


在某些情况下,它的行为非常奇怪...当联系人有两个号码时,如果你选择家庭号码,它会返回手机号码,如果你选择手机号码,它会返回null...你有什么想法吗?!我使用的代码和你完全一样... - simonthumper

2
在你的代码中写下以下代码:
-(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person

{       

    ABMultiValueRef mul;
    mul=(NSString *) ABRecordCopyValue(person, kABPersonEmailProperty);
    int count= ABMultiValueGetCount(mul);
    NSString *name=(NSString *) ABMultiValueCopyValueAtIndex(mul,0);

}

计数变量只是为了知道您在特定联系人的电话号码数量。 - dks1725

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接