2009-10-29 6 views
5

Ich weiß, dass es mehrere Werte für eine E-Mail geben kann, aber ich bin mir nicht sicher, wie ich sie durchsuchen soll.Wie erhalte ich die E-Mails eines iPhone-Adressbuchs als NSStrings?

Ich kann eine Person richtig bekommen.

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

... was kommt als nächstes? Wenn ich versuche, die emails Variable zu drucken, erhalte ich:

Emails: <NSCFType: 0x4018d40> 

Antwort

16

Es liegt daran, dass E-Mails sollten kein String, sondern ein Array sein. Leute können viele E-Mails haben!

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

Here sind einige Dokumente auf Dinge, die Sie mit MultiValueLists tun können

+0

Dank! Weißt du, wie ich die Größe des "E-Mails" -Arrays bekommen kann, damit ich es durchsuchen kann? – marcgg

+0

Ich habe einen Link zu den Dokumenten hinzugefügt, wo Sie die "count" -Methode – coneybeare

+0

für die Zählung finden, die ich am Ende benutzt habe: CFIndex count = ABMultiValueGetCount (emails); – marcgg

4

Der Typ dieses Eintrags ist ein ABMultiValue (genauer gesagt, der Typ dieses Feld ist ein kABMultiStringProperty). Siehe "Using Multivalue Lists" für das Lesen dieser. Sehen Sie die Address Book Objective-C Constants Reference für was jede Eigenschaft zurückgibt.

Denken Sie auch daran, dass AB-Funktionen der Create Rule unterliegen. Sie sind dafür verantwortlich, Objekte, die Sie von einer Funktion erhalten, mit dem Wort "Copy" zu löschen.

1

In iOS 9 die ABFramework für den neuen Kontakte Rahmen wurde veraltet:

ich Ihnen zeigen, ein Beispiel jede E-Mail-Adresse eines CNContact zu protokollieren:

CNContact * yourContact = //... 

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