2011-07-12 14 views
8

は、私はこのようなABRecordRefの電子メールアドレスを取得するためにトリング午前返しkABPersonEmailPropertyは奇妙なもの

電子メールの周りにこのようなものは何
_$!<Home>!$_ (0x6840af0) - [email protected] (0x6840cc0) 

?どのように私はそれを取り除くことができますか?ありがとう。

答えて

31

kABPersonEmailPropertyはタイプkABMultiStringPropertyTypeです。あなたはABMultiValueCopyArrayOfAllValuesを使用して、すべての電子メールアドレスの配列を取得することができ など、そこには単一の電子メールアドレスのプロパティがありません、人は仕事のための電子メールアドレスを持っているかもしれませんが、家のための1:

ABMultiValueRef emailMultiValue = ABRecordCopyValue(ref, kABPersonEmailProperty); 
NSArray *emailAddresses = [(NSArray *)ABMultiValueCopyArrayOfAllValues(emailMultiValue) autorelease]; 
CFRelease(emailMultiValue); 

のラベルを取得するには電子メールアドレスはABMultiValueCopyLabelAtIndexです。 "_$!<Home>!$"はkABHomeLabelと定義されている特別な定数です。kABWorkLabelもあります。

+1

このメールのタグを知ることはできますか?仕事、個人、その他の場合は? – 88fsantos

0

これを試してみてください......

ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; 
picker.peoplePickerDelegate = self; 
// Display only a person's phone, email, and birthdate 
NSArray *displayedItems = [NSArray arrayWithObjects: 
[NSNumber numberWithInt:kABPersonPhoneProperty], 
[NSNumber numberWithInt:kABPersonEmailProperty], 
[NSNumber numberWithInt:kABPersonBirthdayProperty], nil]; 
picker.displayedProperties = displayedItems; 
1

基本的に@omz答えの詳細。私が使用したコードは、自宅の電子メールとその人の名前を抽出したものです:

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person 
{ 
    ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty); 
    for (CFIndex i = 0; i < ABMultiValueGetCount(emails); i++) { 
     NSString *label = (__bridge NSString *) ABMultiValueCopyLabelAtIndex(emails, i); 
     if ([label isEqualToString:(NSString *)kABHomeLabel]) { 
      NSString *email = (__bridge NSString *) ABMultiValueCopyValueAtIndex(emails, i); 
      _emailTextField.text = email; 
     } 
    } 
    CFRelease(emails); 


    NSString *first = (__bridge NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty); 
    NSString *last = (__bridge NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty); 

    if (first && first.length > 0 && last && last.length > 0) { 
     _nicknameTextField.text = [NSString stringWithFormat:@"%@ %@", first, last]; 
    } else if (first && first.length > 0) { 
     _nicknameTextField.text = first; 
    } else { 
     _nicknameTextField.text = last; 
    } 

    [self dismissModalViewControllerAnimated:YES]; 

    return NO; 
} 
+1

これを 'Swift'に実装するにはどうすれば' CFIndex'をループできますか? –