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;