Найти «рабочий» адрес электронной почты человека в адресной книге iPhone? - PullRequest
5 голосов
/ 22 января 2010

Можно ли найти адрес электронной почты определенного типа для человека из адресной книги iPhone? Я знаю, как получить все адреса электронной почты для человека, но не знаю, как определить, какой это электронный адрес («домашний», «рабочий» и т. ), способ прямого доступа к этому адресу без необходимости перебирать их все.

Спасибо.

1 Ответ

15 голосов
/ 22 января 2010

Проверьте наличие метки kABWorkLabel с помощью ABMultiValueCopyLabelAtIndex.

Например, если у вас есть ABRecordRef с именем "person", этот код установит одну строку NSString с именем "emailAddress":

// Email address (if only one, use it; otherwise, use the first work email address)
CFStringRef value, label;
ABMutableMultiValueRef multi = ABRecordCopyValue(person, kABPersonEmailProperty);
CFIndex count = ABMultiValueGetCount(multi);
if (count == 1) {
    value = ABMultiValueCopyValueAtIndex(multi, 0);
    emailAddress = (NSString*)value;
    [emailAddress retain];
    CFRelease(value);
} else {
    for (CFIndex i = 0; i < count; i++) {
        label = ABMultiValueCopyLabelAtIndex(multi, i);
        value = ABMultiValueCopyValueAtIndex(multi, i);

        // check for Work e-mail label
        if (label && CFStringCompare(label, kABWorkLabel, 0) == 0) {
            emailAddress = (NSString*)value;
            [emailAddress retain];
            break;
        }

        CFRelease(label);
        CFRelease(value);
    }
}
CFRelease(multi);
...