2010-01-22 2 views
5

iPhone 주소록에서 특정 이메일 주소를 찾는 방법이 있습니까? 나는 사람의 전자 메일 주소를 모두 얻는 방법을 알고 있으며, 전자 메일 주소의 종류 ("집", "직장"등)를 식별하는 방법이 아니라 ... (또한이 방법이 바람직 할 수도 있습니다), 그들 모두를 반복 할 필요없이 그 주소에 직접 접근하는 방법.iPhone 주소록에있는 사람의 "직장"이메일 주소를 찾으십니까?

감사합니다.

답변

15

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); 
+3

그냥 응답을 응축을, 비밀은 여기 얻는 kABWorkLabel입니다 직장 주소. 당신의 코드는 잠재적 인 누수 문제를 가지고있다. 이메일 주소의 숫자가있을 수 있기 때문에 emailAddress가 설정되기 전에 해제되어야하거나 루프에서 빠져 나오거나 (더 좋게) 작업 이메일 주소의 배열. –

+0

좋은 지적. 나는 이것을 앱에서 가져 왔고 실제로 부동산 (누수가 없음)을 설정하고 있었는데 나는 그 중 하나만 얻는 것에 신경을 썼다. – gerry3

+1

두 개 이상의 전자 메일 주소가 설정되어 있지만 작업 레이블이 지정되어 있지 않으면 위 코드가 실패합니다. 두 개 이상의 주소가 설정되었지만 CFStringCompare가 충돌하기 때문에 레이블이 누락 된 경우에도 실패합니다. 그럼에도 불구하고 이것을 게시 해 주셔서 감사합니다! –

관련 문제