2012-05-08 6 views
6

Wie kann ich den Namen einer ABAddressBook Quelle erhalten, um sie anzuzeigen? (Ich kenne die Aufzählungen kABSourceTypeLocal, kABSourceTypeExchange, ...)ABAddressBook ABSourceName

meine ich nicht den Quelle-Art-Namen, den Sie mit ABRecordCopyValue (Quelle, ABSourceNameProperty) erhalten, aber den richtigen Namen, die in Apples gezeigt Kontakte-App als Tabellenabschnitt, zum Beispiel: „Exchange-Google“ oder „iCloud“

+0

Das gleiche Problem auf meiner Seite. Konnten Sie den Namen abrufen? –

+0

Jeder Erfolg? Das gleiche Problem auch hier. –

Antwort

2

Wenn Sie die ABSource Reference Check-out, können Sie sehen, dass sie eine Eigenschaft namens kABSourceNameProperty, die „den Namen der Quelle“ enthält . Hier ist, wie Sie alle Quellennamen erhalten würden:

NSMutableArray *sourceNames = [[NSMutableArray alloc] init]; 
ABAddressBookRef addressBook = ABAddressBookCreate(); 
CFArrayRef sourcesArray = ABAddressBookCopyArrayOfAllSources(addressBook); 

for (CFIndex i = 0; i < CFArrayGetCount(sourcesArray); i++) { 
    ABRecordRef source = (ABRecordRef)CFArrayGetValueAtIndex(sourcesArray, i); 
    CFStringRef sourceName = (CFStringRef)ABRecordCopyValue(ABRecordGetRecordID(source, kABSourceNameProperty); 

    if(sourceName){ 
     [sourceNames addObject: (__bridge_transfer NSString *)sourceName]; 
    } 
} 

CFRelease(sourcesArray); 
CFRelease(addressBook); 

Hoffe, das hilft!

+0

Dies gibt nicht die gleichen Quellennamen wie die Benutzeroberfläche von Apple. Für mich sind Apples Shows "Exchange", "Facebook" und "iCloud". Wo die obige Antwort gibt "Kontakte" (CNContainerTypeExchange), "Karte" (CNContainerTypeCardDAV) und "" (CNContainerTypeCardDAV) –

+0

@MattToohey - Diese Antwort wurde vor über drei Jahren veröffentlicht. Ich bin nicht auf dem neuesten Stand mit Apples letzten Änderungen an ihrer Adressbuch-API, so dass dies höchstwahrscheinlich kaputt sein wird/unerwartete Ergebnisse haben wird, wenn Sie es jetzt ausführen. – pasawaya