ABMultiValueCopyLabelAtIndex kullanarak kABWorkLabel etiketini kontrol edin. Bir ABRecordRef adında "kişi" varsa
Örneğin, bu kod "emailAddress" adında tek NSString ayarlayacaktır:
// 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);
Sadece tepkisini yoğunlaştırmak için, gizli buradan dışarı çıkar kABWorkLabel olduğunu bir iş adresi. Kodunuzun potansiyel bir sızıntı sorunu olduğuna dikkat edin, e-posta adreslerinin bir dizi e-posta adresi olabileceğinden, e-posta adresi ayarlanmadan önce yayınlanmalı veya döngüden çıkmanız gerekir veya (daha iyisi) iş e-posta adresleri dizisi. –
İyi puanlar. Bunu benim uygulamamdan aldım ve aslında bir mülk (sızıntı) ayarlıyordum ve sadece bir tane almayı düşünüyorum. – gerry3
Birden fazla e-posta adresi ayarlanmışsa ancak iş etiketi atanmamışsa yukarıdaki kod başarısız olur. Birden fazla adres ayarlanmışsa ancak CFStringCompare çökeceğinden etiketlerin eksik olması durumunda da başarısız olur. Yine de bunu göndermek için teşekkürler! –