2012-05-08 2 views
6

Come posso ottenere il nome di una fonte ABAddressBook per visualizzarlo? (So che i enumerazioni kABSourceTypeLocal, kABSourceTypeExchange, ...)ABAddressBook ABSourceName

Non voglio dire il-nome-tipo di origine che si ottiene con ABRecordCopyValue (fonte, ABSourceNameProperty), ma il vero nome che viene mostrato in Apple Contatti-app come una sezione della tabella, ad esempio: "Exchange Google" o "iCloud"

+0

Lo stesso problema al mio fianco. Sei riuscito a recuperare il nome? –

+0

Qualsiasi successo? Lo stesso problema anche qui. –

risposta

2

Se si estrae la ABSource Reference, si può vedere che essi hanno una proprietà chiamata kABSourceNameProperty che contiene "il nome della fonte" . Ecco come ottenere tutti i nomi delle fonti:

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); 

Spero che questo aiuti!

+0

Questo non fornisce gli stessi nomi di origine dell'interfaccia utente dei contatti di Apple. Per me, Apple mostra "Exchange", "Facebook" e "iCloud". Dove la risposta sopra fornisce "Contatti" (CNContainerTypeExchange), "Card" (CNContainerTypeCardDAV) e "" (CNContainerTypeCardDAV) –

+0

@MattToohey - Questa risposta è stata pubblicata più di tre anni fa. Non sono aggiornato con le ultime modifiche apportate da Apple alle API della Rubrica, pertanto è probabile che ciò si interrompa/abbia risultati imprevisti se lo si esegue ora. – pasawaya