Sprawdź etykietę kABWorkLabel za pomocą ABMultiValueCopyLabelAtIndex.
Na przykład, jeśli masz ABRecordRef nazwie „osoby”, to kod będzie ustawiony pojedynczy NSString nazwie „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);
Wystarczy skrapla odpowiedź, sekretem jest tu kABWorkLabel który wysiada adres służbowy. Zauważ, że Twój kod ma potencjalny problem z wyciekiem, ponieważ może istnieć wiele roboczych adresów e-mail, więc adres e-mail powinien zostać zwolniony przed ustawieniem lub musisz wyjść z pętli lub (lepiej) musisz wypluć tablica roboczych adresów e-mail. –
Dobre punkty. Wziąłem to z mojej aplikacji i faktycznie ustawiałem nieruchomość (bez wycieku) i zależy mi tylko na jej zdobyciu. – gerry3
powyższy kod kończy się niepowodzeniem, jeśli ustawiono więcej niż jeden adres e-mail, ale nie przypisano etykiety roboczej. nie powiedzie się, jeśli ustawiono więcej niż jeden adres, ale brakuje etykiet, ponieważ CFStringCompare ulegnie awarii. Niemniej jednak dziękuję za opublikowanie tego! –