ABMultiValueCopyLabelAtIndex를 사용하여 kABWorkLabel의 레이블을 확인하십시오. 당신이 ABRecordRef 명 "사람"이있는 경우
예를 들어,이 코드는 "EMAILADDRESS"라는 이름의 하나는 NSString 설정합니다 :
// 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);
그냥 응답을 응축을, 비밀은 여기 얻는 kABWorkLabel입니다 직장 주소. 당신의 코드는 잠재적 인 누수 문제를 가지고있다. 이메일 주소의 숫자가있을 수 있기 때문에 emailAddress가 설정되기 전에 해제되어야하거나 루프에서 빠져 나오거나 (더 좋게) 작업 이메일 주소의 배열. –
좋은 지적. 나는 이것을 앱에서 가져 왔고 실제로 부동산 (누수가 없음)을 설정하고 있었는데 나는 그 중 하나만 얻는 것에 신경을 썼다. – gerry3
두 개 이상의 전자 메일 주소가 설정되어 있지만 작업 레이블이 지정되어 있지 않으면 위 코드가 실패합니다. 두 개 이상의 주소가 설정되었지만 CFStringCompare가 충돌하기 때문에 레이블이 누락 된 경우에도 실패합니다. 그럼에도 불구하고 이것을 게시 해 주셔서 감사합니다! –