Как получить электронную почту, используя ABPeoplePicker?
Я не нахожу документацию Apple очень полезной для фактического получения данных с помощью средства выбора людей, и, похоже, в Интернете не так много другой информации:(Я предполагаю, что мне нужно получить электронное письмо в этой функции:
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{
}
Что я могу добавить туда, чтобы получить электронную почту выбранного человека?
2 ответа
Использование
ABMultiValueRef emails = ABRecordCopyValue(record, kABPersonEmailProperty);
После этого вы можете использовать вызовы методов API ABMultiValueRefs для получения адреса электронной почты.
РЕДАКТИРОВАТЬ - Это должно дать вам электронную почту
CFStringRef emailId = ABMultiValueCopyValueAtIndex(emails, identifier);
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;