2009-10-29 6 views
5

So che ci possono essere più valori per un'e-mail, ma non sono sicuro di come sfogliarli.Come ottenere le e-mail di contatto di una rubrica di iPhone come NSStrings?

Posso ottenere una persona correttamente.

ABRecordRef person = // getting a person; 
NSString* emails = (NSString *)ABRecordCopyValue(person, kABPersonEmailProperty); 

... quali sono le prospettive? Se provo a stampare la variabile emails ottengo:

Emails: <NSCFType: 0x4018d40> 

risposta

16

E 'perché le email non dovrebbe essere una stringa, ma un array. Le persone possono avere molte e-mail!

ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty); 
CFStringRef email = ABMultiValueCopyValueAtIndex(emails, <INDEX>); 
NSLog((NSString *) email); 

Here sono alcuni documenti su che cosa può fare con MultiValueLists

+0

Grazie! Sai come posso ottenere la dimensione della matrice "email" così posso sfogliarlo? – marcgg

+0

ho aggiunto un collegamento ai documenti dove troverete il metodo 'count' – coneybeare

+0

per il conteggio che ho finito usando questo: Conteggio CFIndex = ABMultiValueGetCount (e-mail); – marcgg

4

Il tipo di questo articolo è un ABMultiValue (in particolare, il tipo di questo campo è un kABMultiStringProperty). Vedi "Using Multivalue Lists" per come leggerli. Vedere lo Address Book Objective-C Constants Reference per ciò che ciascuna proprietà restituisce.

Inoltre, ricordare che le funzioni AB sono soggette allo Create Rule. Sei responsabile del rilascio di oggetti che ricevi da una funzione con la parola "Copia" in essa contenuta.

1

in iOS 9 l'ABFramework è stato deprecato per la nuova Contatti quadro:

vi mostro un esempio per registrare ciascun indirizzo di posta elettronica di un CNContact:

CNContact * yourContact = //... 

for (CNLabeledValue* emailLabeledValue in yourContact.emailAddresses){ 
    NSLog(@"%@",[emailLabeledValue value]); 
}