Как получить электронную почту, используя ABPeoplePicker? - PullRequest
1 голос
/ 18 июля 2011

Я не нахожу документацию Apple очень полезной для фактического получения данных с помощью средства выбора людей, и в Интернете, похоже, не так много другой информации :( Полагаю, мне нужно получить электронное письмо в этой функции:

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{

}

Что я могу добавить туда, чтобы получить электронную почту выбранного человека?

Ответы [ 2 ]

4 голосов
/ 30 марта 2012

Kal ответ на самом деле неточный, а именно потому, что "ABMultiValueCopyValueAtIndex" принимает индекс, а не идентификатор.

Значение идентификатора является статическим (как перечисление)

  • «Домашний адрес электронной почты» всегда равен «0»
  • «Рабочий адрес электронной почты» всегда равен «1».

Таким образом, произойдет сбой, когда выбранный человек сохранит только 1 электронное письмо, которое является «Рабочим письмом».Поскольку идентификатор равен «1», но нам нужен индекс «0».

К счастью, мы можем использовать следующее для получения индекса:

int index = ABMultiValueGetIndexForIdentifier(emails, identifier);

Код:

if (property == kABPersonEmailProperty) {

    ABMultiValueRef emails = ABRecordCopyValue(person, property);

    NSString *count = [NSString stringWithFormat:@"Count: %d Identifier: %d", ABMultiValueGetCount(emails), identifier];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"alert" message:count delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
    [alert release];

    if(ABMultiValueGetCount(emails) > 0)
    {
        int index = ABMultiValueGetIndexForIdentifier(emails, identifier);
        CFStringRef emailTypeSelected = ABMultiValueCopyLabelAtIndex(emails, index);
        CFStringRef emailTypeSelectedLocalized = ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(emails, index));
        CFStringRef emailValueSelected = ABMultiValueCopyValueAtIndex(emails, index);

        self.lblEmailType.text = (NSString *) emailTypeSelected;
        self.lblEmailTypeLocalized.text = (NSString *) emailTypeSelectedLocalized;
        self.lblEmailValue.text = (NSString *) emailValueSelected;
    }

    [ self dismissModalViewControllerAnimated:YES ];
    return NO;
}

return YES;
0 голосов
/ 18 июля 2011

Использование

ABMultiValueRef emails = ABRecordCopyValue(record, kABPersonEmailProperty);

После этого вы можете использовать вызовы метода ABMultiValueRefs API для получения адреса электронной почты.

РЕДАКТИРОВАТЬ - это должно дать вам электронную почту

CFStringRef emailId = ABMultiValueCopyValueAtIndex(emails, identifier);
...