2010-01-22 13 views
5

वहाँ से iPhone पता पुस्तिका एक व्यक्ति के लिए ईमेल पते की एक विशेष प्रकार खोजने के लिए एक तरीका है? मैं जानता हूँ कि एक व्यक्ति के लिए सभी ईमेल पते पाने के लिए, न कि केवल ई-मेल पता है कि किस तरह यह ("घर", "काम", आदि।) है ... और न ही पहचान करने के लिए कैसे (और यह बेहतर हो सकता है), उन सभी के माध्यम से फिर से प्रयास किए बिना उस पते तक सीधे पहुंचने का एक तरीका।पता पुस्तिका एक "कार्य" ईमेल एक व्यक्ति के लिए iPhone में पता लगाएं?

धन्यवाद। ABMultiValueCopyLabelAtIndex का उपयोग कर kABWorkLabel के लेबल के लिए

उत्तर

15

चेक।

उदाहरण के लिए, यदि आप एक ABRecordRef नामित "व्यक्ति" है, इस कोड को एक भी 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); 
+3

बस प्रतिक्रिया गाढ़ा करने के लिए, गुप्त यहाँ kABWorkLabel जो बाहर हो जाता है है एक कार्य पता ध्यान दें कि आपके कोड में संभावित रिसाव समस्या है, क्योंकि वहां कई काम ईमेल पते हो सकते हैं, इसलिए ईमेल एड्रेस को सेटिंग से पहले रिलीज़ किया जाना चाहिए, या आपको लूप से बाहर निकलना होगा, या (बेहतर) आपको थूकने की जरूरत है कार्य ईमेल पते की सरणी। –

+0

अच्छे अंक। मैं अपने ऐप्लिकेशन से इस ले लिया और मैं वास्तव में एक संपत्ति (कोई रिसाव) की स्थापना की गई थी और मैं केवल एक geting के बारे में परवाह। – gerry3

+1

उपरोक्त कोड में विफल रहता है अगर एक से अधिक ई-मेल पता सेट किया गया है, लेकिन कोई काम लेबल असाइन किया गया है। यह भी विफल रहता है अगर एक से अधिक पते सेट किए गए हैं लेकिन CFStringCompare क्रैश होने के बाद लेबल गायब हैं। फिर भी इसे पोस्ट करने के लिए धन्यवाद! –

संबंधित मुद्दे